- UID
- 3
- 帖子
- 924
- 主题
- 28
- 精华
- 5
- 积分
- 5325
- 历练
- 10
- 声望
- 119
- 人气
- 141
- 经验
- 2790
- 金钱
- 6124
- 注册时间
- 2009-7-25
- 最后登录
- 2017-9-6
- 在线时间
- 376 小时
- 阅读权限
- 200
TA的每日心情 | 衰 2010-9-25 00:07 |
---|
签到天数: 3 天 [LV.2]偶尔看看I - 精华
- 5
- 积分
- 5325
- 历练
- 10
- 声望
- 119
- 人气
- 141
|
最终完成的三个CLASS
gameAct.class
package eLuoSiFangKuai;
public class gameAct {
int x;
int y;
}
gameMain.class
package eLuoSiFangKuai;
import javax.swing.*;
public class gameMain extends JFrame{
public gameMain() {
super("俄罗斯方块1.0V---七夕小雨作品");
gameWin g = new gameWin();
add(g);
setSize(380,420);
setLocation(200, 200);
setVisible(true);
}
public static void main(String[] args) {
new gameMain();
}
}
gameWin.class
package eLuoSiFangKuai;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.Timer;
public class gameWin extends JPanel implements ActionListener,KeyListener{
JButton newGame = new JButton("开始");
JButton endGame = new JButton("退出");
int fenShu=0,speed=0,tFenShu=0;
gameAct[] act = new gameAct[4];
gameAct[] actTemp = new gameAct[4];
Random r = new Random();
boolean start=false;
int[][] map = new int[10][18];
Timer t;int temp;
JDialog dialog = new JDialog();
JLabel label = new JLabel();
JButton button = new JButton("ok");
public gameWin() {
for (int i = 0; i < act.length; i++) {
act = new gameAct();
}
for (int i = 0; i < act.length; i++) {
actTemp = new gameAct();
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 18; j++) {
map[j] = 0;
}
}
setLayout(new FlowLayout(FlowLayout.RIGHT));
add(newGame);
add(endGame);
newGame.addActionListener(this);
endGame.addActionListener(this);
addKeyListener(this);
dialog.setLayout(new GridLayout(2,1));
dialog.add(label);
dialog.add(button);
button.addActionListener(this);
dialog.setSize(200,100);
dialog.setLocation(200, 200);
dialog.setVisible(false);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawRect(9, 10, 200, 360);
g.drawString("分数"+fenShu, 220, 60);
g.drawLine(220, 65, 360, 65);
g.drawString("速度"+speed, 220, 90);
g.drawLine(220, 95, 360, 95);
g.drawString("下一个方块", 250, 120);
g.drawString("俄罗斯方块1.0v", 220, 340);
g.drawString("七夕小雨", 220, 360);
////////////////////////
if (start) {
g.setColor(new Color(255,0,0));
for (int i = 0; i < 4; i++) {
g.fillRect(10+act.x*20, 10+act.y*20, 20, 20);
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j <18; j++) {
if (map[j]==1) {
g.fillRect(10+i*20, 10+j*20, 20, 20);
}
}
}
g.setColor(new Color(0,0,255));
for (int i = 0; i < 4; i++) {
g.fillRect(220+actTemp.x*20, 160+actTemp.y*20, 20, 20);
}
}
}
private boolean newAct() {
switch (temp) {
case 0:
act[0].x =3;act[0].y=0;
act[1].x =4;act[1].y=0;
act[2].x =2;act[2].y=1;
act[3].x =3;act[3].y=1;
break;
case 1:
act[0].x =1;act[0].y=0;
act[1].x =2;act[1].y=0;
act[2].x =3;act[2].y=0;
act[3].x =4;act[3].y=0;
break;
case 2:
act[0].x =2;act[0].y=0;
act[1].x =3;act[1].y=0;
act[2].x =2;act[2].y=1;
act[3].x =3;act[3].y=1;
break;
case 3:
act[0].x =2;act[0].y=0;
act[1].x =2;act[1].y=1;
act[2].x =2;act[2].y=2;
act[3].x =3;act[3].y=2;
break;
case 4:
act[0].x =3;act[0].y=0;
act[1].x =3;act[1].y=1;
act[2].x =3;act[2].y=2;
act[3].x =2;act[3].y=2;
break;
case 5:
act[0].x =3;act[0].y=0;
act[1].x =2;act[1].y=1;
act[2].x =3;act[2].y=1;
act[3].x =4;act[3].y=1;
break;
case 6:
act[0].x =2;act[0].y=0;
act[1].x =3;act[1].y=0;
act[2].x =3;act[2].y=1;
act[3].x =4;act[3].y=1;
break;
}
for (int i = 0; i < 4; i++) {
if (maxYes(act.x, act.y)) {
return false;
}
}
return true;
}
public void nextAct(){
switch (temp) {
case 0:
actTemp[0].x =3;actTemp[0].y=0;
actTemp[1].x =4;actTemp[1].y=0;
actTemp[2].x =2;actTemp[2].y=1;
actTemp[3].x =3;actTemp[3].y=1;
break;
case 1:
actTemp[0].x =1;actTemp[0].y=0;
actTemp[1].x =2;actTemp[1].y=0;
actTemp[2].x =3;actTemp[2].y=0;
actTemp[3].x =4;actTemp[3].y=0;
break;
case 2:
actTemp[0].x =2;actTemp[0].y=0;
actTemp[1].x =3;actTemp[1].y=0;
actTemp[2].x =2;actTemp[2].y=1;
actTemp[3].x =3;actTemp[3].y=1;
break;
case 3:
actTemp[0].x =2;actTemp[0].y=0;
actTemp[1].x =2;actTemp[1].y=1;
actTemp[2].x =2;actTemp[2].y=2;
actTemp[3].x =3;actTemp[3].y=2;
break;
case 4:
actTemp[0].x =3;actTemp[0].y=0;
actTemp[1].x =3;actTemp[1].y=1;
actTemp[2].x =3;actTemp[2].y=2;
actTemp[3].x =2;actTemp[3].y=2;
break;
case 5:
actTemp[0].x =3;actTemp[0].y=0;
actTemp[1].x =2;actTemp[1].y=1;
actTemp[2].x =3;actTemp[2].y=1;
actTemp[3].x =4;actTemp[3].y=1;
break;
case 6:
actTemp[0].x =2;actTemp[0].y=0;
actTemp[1].x =3;actTemp[1].y=0;
actTemp[2].x =3;actTemp[2].y=1;
actTemp[3].x =4;actTemp[3].y=1;
break;
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource()==newGame) {
if (e.getActionCommand().equals("开始")) {
newGame.setText("重置");
requestFocus(true);
start = true;
temp = r.nextInt(7);
if (!newAct()) {
t = new Timer(1000-(100*speed),new myTimer());
t.start();
temp = r.nextInt(7);
nextAct();
repaint();
}else {
//这里是游戏失败的情况;
return;
}
}else {
start = false;
fenShu = 0;
tFenShu=0;
speed=0;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 18; j++) {
map[j]=0;
}
}
newGame.setText("开始");
}
}
if (e.getSource()==endGame) {
System.exit(0);
}
if (e.getSource()==button) {
fenShu = 0;
tFenShu=0;
speed=0;
start =false;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 18; j++) {
map[j]=0;
}
}
newGame.setText("开始");
dialog.setVisible(false);
repaint();
}
}
public void Move(int x, int y) {
if (minYes(x, y)) {
for (int i = 0; i < 4; i++) {
act.x+=x;
act.y+=y;
}
}
repaint();
}
private int delact() {
int line = 0;
for (int i = 0; i < 18; i++) {
int j;
for (j = 0; j < 10; j++) {
if (map[j]==0) {
break;
}
}
if (j>=10) {
line +=1;
if (i!=0) {
for (int j2 =i-1; j2 >0; j2--) {
for (int k = 0; k < 10; k++) {
map[k][j2+1] = map[k][j2];
}
}
for (int j2 = 0; j2 < 10; j2++) {
map[0][j2] = 0;
}
}
}
}
repaint();
return line;
}
private void down() {
if (minYes(0, 1)) {
for (int i = 0; i < 4; i++) {
act.y+=1;
}
repaint();
}else {
t.stop();
for (int i = 0; i < 4; i++) {
map[act.x][act.y]=1;
}
int line = delact();
if (line!=0) {
fenShu = fenShu+10*line*line;
if (fenShu-tFenShu>=300) {
tFenShu = fenShu;
if (speed <=9) {
speed+=1;
}
}
}
if (!newAct()) {
temp = r.nextInt(7);
nextAct();
t.start();
}else {
t.stop();
label.setText("游戏结束,您的分数是"+fenShu);
dialog.setVisible(true);
}
repaint();
}
}
public void up(){
gameAct[] tt = new gameAct[4];
for (int i = 0; i < tt.length; i++) {
tt = new gameAct();
tt.x = act.x;
tt.y = act.y;
}
int cx = (tt[0].x+tt[1].x+tt[2].x+tt[3].x)/4;
int cy = (tt[0].y+tt[1].y+tt[2].y+tt[3].y)/4;
for (int i = 0; i < tt.length; i++) {
tt.x = cx+cy-act.y;
tt.y = cy-cx+act.x;
}
for (int i = 0; i < tt.length; i++) {
if (!maxYes(tt.x, tt.y)) {
return;
}
}
for (int i = 0; i < tt.length; i++) {
act.x = tt.x;
act.y = tt.y;
}
repaint();
}
public boolean minYes(int x, int y){
for (int i = 0; i < 4; i++) {
if (!maxYes(act.x+x, act.y+y)) {
return false;
}
}
return true;
}
public boolean maxYes(int x, int y){
if (x<0||x>=10||y<-1||y>=18) {
return false;
}
if (map[x][y]==1) {
return false;
}
return true;
}
public void keyPressed(KeyEvent e) {
if (start) {
switch (e.getKeyCode()) {
case KeyEvent.VK_DOWN:
down();
break;
case KeyEvent.VK_UP:
up();
break;
case KeyEvent.VK_LEFT:
Move(-1, 0);
break;
case KeyEvent.VK_RIGHT:
Move(1, 0);
break;
default:
break;
}
}
}
public void keyReleased(KeyEvent arg0) { }
public void keyTyped(KeyEvent arg0) { }
public class myTimer implements ActionListener{
public void actionPerformed(ActionEvent e) {
if (start) {
down();
}
}
}
} |
|