import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import javax.swing.*;
import javax.swing.Timer;
public class MyGame extends JFrame {
public MyGame(){
GameBody gamebody=new GameBody();
gamebody.setBounds(5,10,500,600); //
gamebody.setOpaque(false);
gamebody.setLayout(null);
addKeyListener(gamebody);
add(gamebody);
int w=Toolkit.getDefaultToolkit().getScreenSize().width;
int h=Toolkit.getDefaultToolkit().getScreenSize().height;
final JButton login=new JButton(new ImageIcon("image/cxks.png"));
login.setContentAreaFilled(false);
login.setMargin(new Insets(0,0,0,0));
login.setBorderPainted(false);
login.setBounds(340,320,120,26);
gamebody.add(login);
login.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) { //登录的按钮
if(e.getSource()==login){
requestFocus(true); //获得焦点,不用失去焦点
gamebody.resetMap(); //重置地图
gamebody.drawWall(); //冲重新绘制边界墙体
gamebody.createshape(); //重新产生新的地图
gamebody.setStart(false); //唤醒定时下落的线程
gamebody.score=0; //将分数置为零
repaint();
}
}
});
final JButton pauselogin=new JButton(new ImageIcon("image/zt.png"));
pauselogin.setContentAreaFilled(false);
pauselogin.setMargin(new Insets(0,0,0,0));
pauselogin.setBorderPainted(false);
pauselogin.setBounds(340,370,120,26);
gamebody.add(pauselogin);
pauselogin.addMouseListener(new MouseListener(){ //暂停的按钮
//鼠标点击事件,可以分别判断不同的事件,做出不同的反应
public void mouseClicked(MouseEvent e){
if(e.getButton()==e.BUTTON1 ){ //单击左键暂停
gamebody.setStart(true); //将自动下落线程关闭
//requestFocus(true); //同时整个JFrame失去焦点,无法操作,但可以点击按钮
}
else if(e.getButton()==e.BUTTON3 ){ //右击暂停,继续游戏
gamebody.setStart(false); //唤醒自动下落线程
requestFocus(true);
}
/* if(e.getClickCount()==2){ //左键双击,也可以继续游戏
gamebody.setStart(false);
requestFocus(true);
}*/
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
});
setTitle("俄罗斯方块");
setResizable(false);
setFocusable(true);
setBounds((w-500)/2,(h-600)/2,500,600);
setLayout(null);
setVisible(true);
setDefaultCloseOperation(3);
}
public static void main(String[] args) {
new MyGame();
}
//创建需要定义的局部变量和游戏类
class GameBody extends JPanel implements KeyListener{
private int shapeType=-1; //定义方块的类型 定义的为7种
private int shapeState=-1; //定义方块为何种状态,每种都有四种状态
private int nextshapeType=-1; //定义下一块产生的类型
private int nextshapeState=-1; //定义下一块的方块的状态
private final int CELL=25; //定义方格的大小
private int score=0; //定义显示的成绩
private int left; //定义初始图形与两边的墙的距离
private int top; //定义初始图形与上下墙的距离
private int i=0; //表示列
private int j=0; //表示行
public int flag=0;
public volatile boolean start=false; //暂停的判断条件,为轻量锁,保持同步的
Random randomcolor=new Random();
Random random=new Random();
//定义地图的大小,创建二位的数组
int[][] map=new int[13][23];
//初始化地图
public void resetMap(){
for(i=0;i<12;i++){
for(j=0;j<22;j++){ //遍历的范围不能小
map[i][j]=0;
}
}
}
//画围墙的方法
public void drawWall(){
for(j=0;j<22;j++) //0到21行
{
map[0][j]=2;
map[11][j]=2; //第0行和第11行为墙
}
for(i=0;i<12;i++){ //0到11列
map[i][21]=2; //第21行划墙
}
}
//定义随机的图形种类
private final int[][][] shapes=new int[][][]{
// i
{ { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } },
// s
{ { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } },
// z
{ { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } },
// j
{ { 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
// o
{ { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
// l
{ { 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
// t
{ { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
{ 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 } }
};
//产生新图形的方法
public void createshape(){
if(shapeType==-1&&shapeState==-1){
shapeType = random.nextInt(shapes.length);
shapeState = random.nextInt(shapes[0].length);
}else{
shapeType=nextshapeType;
shapeState=nextshapeState;
}
nextshapeType = random.nextInt(shapes.length);
nextshapeState = random.nextInt(shapes[0].length);
//shapeType=(int)(Math.random()*1000)%7;
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
Demo3.zip (36个子文件)
Demo3
Demo3.iml 433B
src
MyGame.java 17KB
image
cxks.png 9KB
zt.png 16KB
Demo3.iml 429B
.idea
dbnavigator.xml 23KB
misc.xml 238B
modules.xml 257B
workspace.xml 2KB
.gitignore 50B
out
production
Demo3
MyGame$GameBody$TimeListener.class 1KB
MyGame$2.class 1KB
image
cxks.png 9KB
zt.png 16KB
MyGame$1.class 1KB
Demo3.iml 429B
MyGame.class 2KB
.idea
dbnavigator.xml 23KB
misc.xml 238B
modules.xml 257B
workspace.xml 2KB
.gitignore 50B
MyGame$GameBody.class 9KB
.idea
dbnavigator.xml 23KB
misc.xml 276B
modules.xml 257B
workspace.xml 2KB
.gitignore 50B
out
production
Demo3
MyGame$GameBody$TimeListener.class 1KB
MyGame$2.class 1KB
image
cxks.png 9KB
zjm.png 125KB
zt.png 16KB
MyGame$1.class 1KB
MyGame.class 2KB
MyGame$GameBody.class 9KB
共 36 条
- 1
陈橘又青
- 粉丝: 11w+
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0