1、 成 绩 评 定 表 学生姓名 班级学号 专 业 电子信息工程 课程设计题目 俄罗斯方块游戏设计 评 语 组长签字: 成绩 日期 2013 年 月 日 课程设计任务书 学 院 信息学院 专 业 电子信息工程 学生姓名 班级学号 课程设计题目 俄罗斯方块游戏设计 实践教学要求与任务: 俄罗斯方块是一款适合大众的游戏软件,它适合不同年龄的人玩。本软件实现的基本功能如下: l 游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过
2、程中随时了解得分情况和下一个将要出现方块的提示。 l 游戏控制:玩家可以通过游戏控制功能来控制游戏开始,暂停,结束游戏,游戏难度的设置以及音效控制。 l 玩家游戏信息存储及删除:玩家的得分在前五名时,将会记录在排行榜上,同时可为玩家清空排行榜。 游戏软件随即不断的下落其中方块中的一种,玩家在方块落到底部之前将方块尽量整齐的摆放好,以便能够对满一行进行消除,玩家可以旋转,左右移动方块,以选择最佳的摆放位置和方式,也可以加快下落的速度,甚至可以直接落到底部,以便节省游戏的时间。当方块落到底部的时候,就不能进行操作的,此时会在顶部出现另一个方块。在堆放方块的时候,如果一行堆满的话,则进行消行,
3、上面的方块自动的向下移动一行。消除一行可以得到100分, 工作计划与进度安排: 第18周:布置课程设计任务,查阅资料,分组设计,程序调试。 第19周:程序调试,编写课程设计报告,验收,答辩。 指导教师: 2013年6月20日 专业负责人: 2013年6月20日 学院教学副院长: 2013年6月20日 目 录 1.课设软件主要功能 …………………………………………1 2.类总体设 …………………………………………..1 2.1类组合关系图 ………………………………….………1 2.2主类
4、 ……………………………….…………2 2.3其它类 …………………….……………………..2 3.类详细设计… ………………………………………2 3.1 ERS_Block主类 ……..…………………………….……..2 3.2 Command处理控制类… ….……………………….….…4 3.3 GameCanvas游戏画布类 ………….………………………4 3.4 Block方块类............……………….…….………………….6 4.关键类成员函数流程图及代码………………………..….…..7 5.
5、软件运行结果………………………………………………...17 结论……………………...…………………………….………20 参考文献……………….……………………………………...20 1.课设软件主要功能 本系统是一个俄罗斯方块游戏的系统设计[1],实现的基本功能就是能实现经典俄罗斯方块游戏的基本功能。如用键盘上的空格下左右键来控制方块的变形,移动等功能。点击控制面板上的开始游戏,游戏暂停,提高级数,降低级数退出游戏等按钮来实现游戏的开始,暂停,停止游戏,增加难度,降低难度等功能。
6、 俄罗是方块游戏 游戏区 游戏控制 数据操作 图1.1功能图 2.类总体设计 2.1类组合关系图 Mypanel Command MyTimer ERS-Block 图2.1. 类组合关系图 2.2主类 ERS_Block继承Frame类负责游戏全局的控制[2]。对开始游戏、暂停
7、/继续游戏、结束游戏、等级设置。玩家可自行设定游戏等级,主要提供10种级别,级别越高,游戏速度越快,难度越大 2.3其他类 1.Mypanel继承Panel类。 2.Block是方块类控制块的移动,下落变形功能。七种类型方块的父类,定义了所有类型方块的共同特征和行为。 3.GameCanvas是游戏画布类,继承Canvas类,界面设计应遵循简介美观方便易用的基本原则在游戏区显示方块。 4.Command类是控制按钮类。 5.MyTimer类继承自线程类Thead。包含run()方法,sleep()方法,控制游戏的速度。 6.WinListener类继承WindowAdapter类
8、 3.类详细设计 3.1ERS_Block主类 图3.1主类数据透视图 定义成员变量[3] ① 右边信息窗体的布局 MyPanel infoScr = new MyPanel(); infoScr.setLayout(new GridLayout(4,1,0,5)); infoScr.setSize(120,300); ② 定义标签和初始值 Label scorep = new Label("分数:",Label.LEFT); Label levelp = new Label("级数:",Label.LEFT); ③ 右边控制按钮窗体的布局
9、MyPanel controlScr = new MyPanel(); controlScr.setLayout(new GridLayout(5,1,0,5)); rightScr.add(controlScr); ④ 定义按钮play Button play_b = new Button("开始游戏"); play_b.setSize(new Dimension(50,200)); 定义按钮Level UP Button level_up_b = new Button("提高级数"); level_up_b.setSize(new Dimension(50,
10、200)); ⑤ 定义按钮Level Down Button level_down_b =new Button("降低级数"); level_down_b.setSize(new Dimension(50,200)); ⑥ 定义按钮Level Pause Button pause_b =new Button("游戏暂停"); pause_b.setSize(new Dimension(50,200)); ⑦ 定义按钮Quit Button quit_b = new Button("退出游戏"); quit_b.setSize(new Dimension(50
11、200)); ; 成员方法 ① 俄罗斯方块类的构造方法 方法定义:ERS_Block(String title) ② isGameOver方法 方法定义:private boolean isGameOver() 功能描述:该方法是判断游戏是否该结束了,只需要判断窗口中的最顶端那一行中是否有方块,同时也要判断最底端的是否也有,如果都有即结束。 3.2Command处理控制类 图3.2Command类数据透视图 成员变量[4]: 给按钮编号 int button_play int button_levelup int button_leve
12、ldown int button_quit ; int button_pause int curButton; GameCanvas scr; 成员方法: ① 控制按钮类的构造方法 方法定义:Command(int button,GameCanvas scr) ② 按钮执行方法 方法定义:public void actionPerformed (ActionEvent e) 功能:点击按钮实现游戏的开始,结束,升级,降级,暂停[5]。 3.3GameCanvas游戏画布类 图3.3GameCanvas类数据透视图 成员
13、变量: 小方块边长 :final int 0unitSize = 30 正方格的行数: int rowNum 方格的列数 :int columnNum 允许有多少行未削 :int maxAllowRowNum 新出现块的起始行坐标 :int blockInitRow 出现块的起始列坐标: int blockInitCol 屏幕数组: int [][] scrArr 对方快的引用:Block b 2.画布类的构造方法 成员方法[5]: ① 初始化屏幕,并将屏幕数组清零的方法 方法定义 :void initScr() ② 重新刷新画布方法 方法定义 :public vo
14、id paint(Graphics g) ③ 画方块的方法 方法定义 : public void drawUnit(int row,int col,int type) 功能:以背景为颜色画,画正在下落的方块,画已经落下的方块。 ④ 块的初始v行坐标方法 方法定义 : public int getInitRow() 返回新块的初始行坐标 :return(blockInitRow) ⑤ 返回新块的初始列坐标方法 方法定义 :public int getInitCol() 返回新块的初始列坐标 :return(blockInitCol) ⑥ 满行删除方法 方法定义 :void
15、 deleteFullLine() 功能:这个就是实现如何将行消除的,其实就是在判断了该行该消除时候将上面的方块都向下平移一格,这样在实现程序界面也就给玩家是消一行的视觉效果[6]。 3.3Block方块类 图3.3Block类数据透视图 成员变量: 块的模式编号:int blockType; 块的翻转状态:int turnState; 块的下落状态:int blockState; 块在画布上的坐标:int row,col; GameCanvas scr; 成员方法: 1) fallDown方法 方法定义:public void fallDown ()
16、 功能描述:实现方块的运行,下落。 2) leftMove() 方法方法定义:public synchronized boolean leftMove() 功能描述:将当前画移动到所左面的位置。 3) rightMove()方法 方法定义:private boolean rightMove () 功能描述:将方块想右边移动。 4) 方法 方法定义:public void turnNext() 功能描述:实现方块的旋转。 5) leftturn方法 方法定义:private synchronized boolean leftturn() 功能描述:将当前块实现翻转。
17、6) deleteFullLine方法 方法定义:private boolean deleteFullLine() 功能描述:实现满行删除的方法。 7) erase方法 方法定义:private void erase() 功能描述:将当前块从画布的对应位置移除。 8) display方法 方法定义:private void display() 功能描述:实现重画画布的时候显示当前块 4.关键类成员函数流程图及代码 4.1系统流程图 选择游戏等级 进入游戏界面 开始游戏 结束游戏 是否到 顶部 是否到 顶部 随机选择方块类 方块下落一行
18、 处理玩家操作 图4.1系统流程图[7] 4.2源代码[7] import java.awt.*; import java.awt.event.*; //俄罗斯方块类 class ERS_Block extends Frame{ public static boolean isPlay=false; public static int level=1,score=0; public static TextField scoreField,levelField
19、 public static MyTimer timer; GameCanvas gameScr; public static void main(String[] argus){ ERS_Block ers = new ERS_Block("俄罗斯方块游戏 "); WindowListener win_listener = new WinListener(); ers.addWindowListener(win_listener); } //俄罗斯方块类的构造方法 ERS_Block(String title){ super(title); se
20、tSize(600,480); setLayout(new GridLayout(1,2)); gameScr = new GameCanvas(); gameScr.addKeyListener(gameScr); timer = new MyTimer(gameScr); timer.setDaemon(true); timer.start(); timer.suspend(); add(gameScr); Panel rightScr = new Panel(); rightScr.setLayout(new GridLayout(2,1,0,30)
21、); rightScr.setSize(120,500); add(rightScr); //右边信息窗体的布局 MyPanel infoScr = new MyPanel(); infoScr.setLayout(new GridLayout(4,1,0,5)); infoScr.setSize(120,300); rightScr.add(infoScr); //定义标签和初始值 Label scorep = new Label("分数:",Label.LEFT); Label levelp = new Label("级数:",Label.LEFT);
22、scoreField = new TextField(8); levelField = new TextField(8); scoreField.setEditable(false); levelField.setEditable(false); infoScr.add(scorep); infoScr.add(scoreField); infoScr.add(levelp); infoScr.add(levelField); scorep.setSize(new Dimension(20,60)); scoreField.setSize(new Dimen
23、sion(20,60)); levelp.setSize(new Dimension(20,60)); levelField.setSize(new Dimension(20,60)); scoreField.setText("0"); levelField.setText("1"); //右边控制按钮窗体的布局 MyPanel controlScr = new MyPanel(); controlScr.setLayout(new GridLayout(5,1,0,5)); rightScr.add(controlScr); //定义按钮play Button
24、 play_b = new Button("开始游戏"); play_b.setSize(new Dimension(50,200)); play_b.addActionListener(new Command(Command.button_play,gameScr)); //定义按钮Level UP Button level_up_b = new Button("提高级数"); level_up_b.setSize(new Dimension(50,200)); level_up_b.addActionListener(new Command(Command.button
25、levelup,gameScr)); Button level_down_b =new Button("降低级数"); level_down_b.setSize(new Dimension(50,200)); level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr)); Button pause_b =new Button("游戏暂停"); pause_b.setSize(new Dimension(50,200)); pause_b.addActionListener(n
26、ew Command(Command.button_pause,gameScr)); Button quit_b = new Button("退出游戏"); quit_b.setSize(new Dimension(50,200)); quit_b.addActionListener(new Command(Command.button_quit,gameScr)); controlScr.add(play_b); controlScr.add(level_up_b); controlScr.add(level_down_b); controlScr.add(pau
27、se_b); controlScr.add(quit_b); setVisible(true); gameScr.requestFocus(); } //游戏画布类 class GameCanvas extends Canvas implements KeyListener{ final int unitSize = 30; //小方块边长 int rowNum; //正方格的行数 int columnNum; //正方格的列数 int maxAllowRowNum; //允许有多少行未削 int blockInitRow; //新出现块的起始行坐标
28、 int blockInitCol; //新出现块的起始列坐标 int [][] scrArr; //屏幕数组 Block b; //对方快的引用 //画布类的构造方法 GameCanvas(){ rowNum = 15; columnNum = 10; maxAllowRowNum = rowNum - 2; b = new Block(this); blockInitRow = rowNum - 1; blockInitCol = columnNum/2 - 2; scrArr = new int [32][32]; } } //画方块
29、的方法 public void drawUnit(int row,int col,int type){ scrArr[row][col] = type; Graphics g = getGraphics(); switch(type){ //表示画方快的方法 case 0: g.setColor(Color.black);break; //以背景为颜色画 case 1: g.setColor(Color.blue);break; //画正在下落的方块 case 2: g.setColor(Color.magenta);break; //画已经落下的方法 }
30、g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);
g.dispose();
}
public Block getBlock(){
return b; //返回block实例的引用
}
}
//满行删除方法
void deleteFullLine(){
int full_line_num = 0;
int k = 0;
for (int i=0;i 31、for(int j=0;j 32、];
}
}
for(int i = k-1 ;i < rowNum; i++){
for(int j = 0; j < columnNum; j++){
drawUnit(i,j,0);
scrArr[i][j]=0;
}
}
ERS_Block.score += full_line_num;
ERS_Block.scoreField.setText(""+ERS_Block.score);
}
//处理键盘输入的方法
public void keyPressed(KeyEvent e){
if(!ERS_Block.isPlay)
33、return;
switch(e.getKeyCode()){
case KeyEvent.VK_DOWN:b.fallDown();break;
case KeyEvent.VK_LEFT:b.leftMove();break;
case KeyEvent.VK_RIGHT:b.rightMove();break;
case KeyEvent.VK_SPACE:b.leftTurn();break;
}
}
}
//处理控制类
class Command implements ActionListener{
static final int butt 34、on_play = 1; //给按钮分配编号
static final int button_levelup = 2;
static final int button_leveldown = 3;
static final int button_quit = 4;
static final int button_pause = 5;
static boolean pause_resume = true;
int curButton; //当前按钮
GameCanvas scr; //控制按钮类的构造方法
Command(int button,GameCanvas 35、 scr){
curButton = button;
this.scr=scr;
}
//按钮执行方法
public void actionPerformed (ActionEvent e){
switch(curButton){
case button_play:if(!ERS_Block.isPlay){
scr.initScr();
ERS_Block.isPlay = true;
ERS_Block.score = 0;
ERS_Block.scoreField.setText("0");
ERS_Block.timer.resume() 36、
}
scr.requestFocus();
break;
case button_levelup:if(ERS_Block.level < 10){
ERS_Block.level++;
ERS_Block.levelField.setText(""+ERS_Block.level);
ERS_Block.score = 0;
ERS_Block.scoreField.setText(""+ERS_Block.score);
}
scr.requestFocus();
break;
case button_leveldown:if(ERS_B 37、lock.level > 1){
ERS_Block.level--;
ERS_Block.levelField.setText(""+ERS_Block.level);
ERS_Block.score = 0;
ERS_Block.scoreField.setText(""+ERS_Block.score);
}
scr.requestFocus();
break;
case button_pause:if(pause_resume){
ERS_Block.timer.suspend();
pause_resume = false;
}else{ 38、
ERS_Block.timer.resume();
pause_resume = true;
}
scr.requestFocus();
break;
case button_quit:System.exit(0);
}
}
}
//方块类
class Block {
static int[][] pattern = {
{0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态
{0x04e0,0x0464,0x00e4,0x04c4},
{0x4620,0x6c00,0x4620,0x6c 39、00},
{0x2640,0xc600,0x2640,0xc600},
{0x6220,0x1700,0x2230,0x0740},
{0x6440,0x0e20,0x44c0,0x8e00},
{0x0660,0x0660,0x0660,0x0660}
};
int blockType; //块的模式号(0-6)
int turnState; //块的翻转状态(0-3)
int blockState; //快的下落状态
int row,col; //块在画布上的坐标
GameCanvas scr; //块类的构造方法
Block(GameCanva 40、s scr){
this.scr = scr;
blockType = (int)(Math.random() * 1000)%7;
turnState = (int)(Math.random() * 1000)%4;
blockState = 1;
row = scr.getInitRow();
col = scr.getInitCol();
}
//定时线程
class MyTimer extends Thread{
GameCanvas scr;
public MyTimer(GameCanvas scr){
this.scr = scr; 41、
}
public void run(){
while(true){
try{
sleep((10-ERS_Block.level + 1)*100);
}
catch(InterruptedException e){}
if(!scr.getBlock().fallDown()){
scr.deleteFullLine();
if(scr.isGameEnd()){
ERS_Block.isPlay = false;
suspend();
}
else
scr.getBlock().reset();
}
}
}
}
cl 42、ass WinListener extends WindowAdapter{
public void windowClosing (WindowEvent l){
System.exit(0);
}
}
5.软件运行结果
图5.1系统主窗口
图5.2方块翻转功能
图5.3方块翻转功能
图5.4界面消行功能
图5.6得分情况
图5.7游戏结束
结论
学习了《Java面向对象编程》[8]的课程,为了更进一步的提高我们对Java的深入学习,进 43、行了一周的课程设计,我所选择课程设计是利用Java设计一个简单的俄罗斯方块游戏。采用swing界面设计技术[9]设计窗口,按钮等,并添加事件监听,并采用线程技术[10]控制游戏的速度。俄罗斯方块的应用程序要求的功能:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况,可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏,玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏的速度越快,难度越大等功能都以完全实现。此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。
参考文献
[1]《Java面向对象程序设计》 陈明主 44、编,清华大学出版社。
[2]《JAVA课程设计》 黄明 梁旭 周绍斌编著,电子工业出版社。
[3]《JAVA编程宝典》李钟尉 陈丹丹 张振坤编著,人民邮电出版社
[4]《.JSP网站编程教程》第1版 屈辉立 陈可明 石武,北京希望电子出版社。
[5]《B/S模式构建在线考试系统》 白勇,重庆电力高等专科学校学报。
[6]《Java 编程思想》 Bruce Eckel,北京机械工业出版社
[7] 《实用Java程序设计教程》 宛延闿,北京机械工业出版社。
[8] 《JAVA面向对象程序编程》 张孝祥,北京清华出版社。
[9 45、]《Java 语言使用教程》 丁振凡,北京邮件大学出版社。
[10]《Java 语言使用教程实验指导》 丁振凡,北京邮件大学出版社。
目 录
第一章 概 论 1
1.1项目名称 1
1.2项目地点 1
1.3区域特点 1
1.4建设规模 1
1.5可行性研究范围 2
1.6项目估算总投资额 3
第二章 项目市场分析 3
2.1####县经济发展趋势分析 3
2.2####县房地产发展概况 4
2.3区域市场分析 10
2.4项目利弊分析 11
第三章 项目定位及销售预测 12
3.1项目定位 12
3.2销售情况预测 14
3.3销售价格预测 14 46、
第四章 项目的工程技术方案 15
4.1总平面及建筑方案 15
4.2结构 16
4.3供配电工程 16
4.4给排水工程 16
4.5人防 17
4.6弱电工程 17
4.7主要设备设施 17
4.8交通与停车 17
4.9环境保护 17
第五章 项目管理与建设进度计划 19
5.1项目运作模式 19
5.2招投标管理 19
5.3工程监理 19
5.4物业管理 19
5.5建设进度计划 19
5.6销售计划 20
第六章 项目营销和招商方案 21
6.1销售、租赁比例 21
6.2运营策略 21
6.3招商策略 22
第七章 投资估算和资金筹措 25
7.1投资估算 25
7.2资金筹措 27
7.3资金平衡计划:见下表 28
第八章 效益分析 29
8.1销售收入、销售税金及附加估算 29
8.2经营成本及费用估算 30
第九章 项目风险及防范措施 31
9.1市场风险 31
9.2筹资风险 31
9.3销售不确定性风险 31
9.4项目开发的风险 32
9.5成本控制的风险 32
第十章 结论及建议 33
10.1结论 33
10.2建议 33
23






