Java大作业俄罗斯方块

Java大作业俄罗斯方块
Java大作业俄罗斯方块

2017-2018学年第1学期《Java程序设计》课程大作业报告

项目名称:Tetris

组长:鞠英杰成员:张浩、陈传志

班级_______ ____学号___ __姓名____ _______

班级_______ _ __学号___ ___姓名____ ______

班级_______ ___学号_______姓名____ _______

课题实现采用的工具(如为其他,请填写具体工具名称)

□Eclipse □其他_______________________________________________

课题完成时间:___________________________________

对应提交的电子文档打包文件名称(准确填写):

==============以下部分为教师填写区,请勿填写==============

成绩评定:

软件运行______软件基本功能_______软件提高功能______ 软件部分成绩________

文档结构______文档理论___________文档撰写__________ 文档部分成绩__-______

总成绩_____________

备注

一.软件系统分析和设计方案

该软件是一个俄罗斯方块游戏软件,实现了方块的移动与变换方向、难度选择、游戏的开始与暂停以及显示游戏玩法的功能,另外还添加了背景音乐的功能。

在设计时使用三维数组记录方块的形状,使用二维数组表示界面上的小方块的位置。

添加定时器监听每隔一定时间重画地图,使其达到方块下落的目的。添加菜单栏并给菜单栏内的子菜单添加监听器,实现相关功能。添加键盘监听,控制方块下落。采用了JApplet和AudioClip类进行音乐播放,把歌曲当成文件进行操作,然后把文件转化成URL格式(f.toURL)进行播放。

二.软件系统实现

1.窗体的实现

建立Tetris类建立主类,它带有创建窗体和菜单项监听的作用。使用Jframe类创建窗体,JMenu类创建游戏菜单和帮助菜单,JMenuBar类创建菜单条,使用JmenuItem 类分别在游戏菜单和帮助菜单添加新游戏、暂停、继续、难度选择、退出的菜单项和关于的菜单项。

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

public class Tetris extends JFrame{

public static void main(String[] args) {

PlayMusic play = new PlayMusic();

play.play();

final Tetrisblok tb = new Tetrisblok();

JFrame frame = new JFrame();

JMenuBar menu = new JMenuBar();

frame.setJMenuBar(menu);

JMenu game = new JMenu("游戏");

JMenuItem newgame = game.add("新游戏");

JMenuItem pause = game.add("暂停");

JMenuItem goon = game.add("继续");

JMenu choose = new JMenu("难度选择");

JMenuItem easy = choose.add("简单");

JMenuItem normal = choose.add("正常");

JMenuItem hard = choose.add("困难");

game.add(choose);

JMenuItem exit = game.add("退出");

JMenu help = new JMenu("帮助");

JMenuItem about = help.add("关于");

menu.add(game);

menu.add(help);

frame.addKeyListener(tb);

子菜单监听:在菜单中我们用JMenu 分别建了游戏(game)和帮助(help)菜单;我们为游戏菜单和帮助菜单添加了一些子菜单(如帮助的子菜单关于,游戏的子菜单暂停,继续等等),要想让这些只菜单起作用,那么我们就用到了子菜单监听器。

(1)暂停游戏(pause)监听:

pause.addActionListener(new ActionListener())是子菜单暂停监听方法,当鼠标点击暂停时,该方法生效,在该方法中我们将Tetrisblok中的变量z=1;这样在定时监听的类TimeListener中就不会使当前的方块下落和变换。

代码:pause.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

tb.z=1;

}

(2)游戏继续(goon)监听

和游戏暂停类似只不过是将z置成0;

代码:goon.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

tb.z=0;

}

});

(3)难度监听:

easy.addActionListener(new ActionListener())是简单难度监听的方法,在该方法中我们会改变Tetrisblok类中控制方块下落速度的变量s,调用newmap()方法把地图初始化,调用生成新方块的方法newblok(),这样在TimeListenner的类中,会调用timer.setDelay(s);的方法来更新方块下落的速度。另外调用newmap()方法把地图初始化,调用生成新方块的方法newblok(),让Tetrisblok中的变量score(分数)变为0。正常,困难的难度同理,只是在方法中改变了方块下落的速度。

代码:easy.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

tb.newmap();

tb.drawwall();

tb.newblock();

tb.score = 0;

tb.s=1000;

}

});

normal.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

tb.newmap();

tb.drawwall();

tb.newblock();

tb.score = 0;

tb.s=600;

}

});

hard.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

tb.newmap();

tb.drawwall();

tb.newblock();

tb.score = 0;

tb.s=300;

}

});

(4)监听新游戏:

用newgame.addActionListener(new ActionListener()方法来监听子菜单newgame(子菜单);鼠标点到新游戏时该方法中的public void actionPerformed(ActionEvent e) 方法会生效,在这个方法中我们调用了Tetrisblok中的newmap()(初始化地图),drawwall()(画围墙),newblock()(生成新方块)方法来对游戏初始化。

代码:newgame.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

tb.newmap();

tb.drawwall();

tb.newblock();

tb.score = 0;

}

});

(5)退出子菜单监听:

在这个方法中,我们只要给这个子菜单加个监听器来监听他,在他的pblic void actionPerformed(ActionEvent arg0) 方法中调用系统退出方法System.exit(0);

即可。

代码:exit.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

System.exit(0);

}

});

(6)帮助子菜单监听:

关于(about)子菜单监听:在该监听的方法中调用javax.swing.*中的方法

JOptionPane.showMessageDialog(null, "")来弹出一个对话框,并显示你要提示的内容。

about.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent arg0) {

// TODO Auto-generated method stub

JOptionPane.showMessageDialog(null, "操作方法:\n\t↑:变换形状\n\t↓:加速下降\n\t←:左移\n\t→:右移\n\tP:暂停/继续");

frame.add(tb);

frame.setLocation(100, 100);//设置窗体出现的位置

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(470, 500);//设置窗体的大小

frame.setTitle("俄罗斯方块");

frame.setVisible(true);//窗体可见

frame.setResizable(false);//设置窗体大小不可调整

}

}

2.创建俄罗斯方块类Tetrisblok类

(1)Tetrisblok类包含游戏的具体实现方法,包括方块形状的矩阵表示shapes[][][],初始化地图newmap(),生成新方块newblock(),画方块paintComponent(Graphics g),画围墙drawwall(),消行delline,判断游戏结束gameover(int x , int y),定时器监听TimerListener类,键盘监听keyPressed(KeyEvent e),移动方法down()、right()、left()。

用坐标x,y来表示小方块的坐标位置,利用0,1矩阵来代表空白和方块,并显示方块的所在位置。

public class Tetrisblok extends JPanel implements KeyListener {

int blockType; //代表当前方块类型

int turnState; //代表当前方块状态

int blockType1 = 0;//代表下一方块类型

int turnState1 = 0;//代表下一方块状态

int score = 0; //分数

int x; //横坐标

int y; //纵坐标

int i = 0; //计数

int j = 0; //计数

int r0=0; //当前方块编号

int r=(int) (Math.random() * 10); //下一个方块编号

int z=0; //监听暂停状态

int s=1000; //难度监听

int flag = 0;

int[][] map = new int[13][23]; //代表游戏区域的数组

Timer timer; //定时器监听

(2)使用shapes[][][]三维数组储存方块的形状第一组代表方块类型有S、Z、L、J、I、O、T 7种形状,第二组代表旋转旋转后所成的状态,第三四组为表示方块形状的矩阵。

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 } } };

(3)生成新方块。

利用随机出的数取整后,blokType在取除以7的余数,共有0到6这7个数,分别代表7种方块;同理,turnState为0到3,四个状态。

public void newblock() {

r0=r;

r=(int) (Math.random() * 10);//产生0到1之间的随机小数

blockType = r0 % 7;

turnState = r0 % 4;

blockType1 = r % 7;

turnState1 = r % 4;

x = 4;//方块出生的位置,为顶部最中间

y = 0;

if (gameover(x, y) == 1) { //游戏结束,并弹出窗口询问是否要继续游戏newmap();

drawwall();

score = 0;

flag=1;

JOptionPane.showMessageDialog(null, "GAME OVER");

if(JOptionPane.showConfirmDialog(null, "NEW GAME", "消息", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){

flag=0;

}

else System.exit(0);

}

}

(4)画围墙

利用map数组,规定宽为12,高为22,2表示该位置是墙。

public void drawwall() {

for (i = 0; i < 12; i++) {

map[i][21] = 2;

}

for (j = 0; j < 22; j++) {

map[11][j] = 2;

map[0][j] = 2;

}

}

(5)初始化地图

清空,即让数组map[][]全置为0。

public void newmap() {

for (i = 0; i < 12; i++) {

for (j = 0; j < 22; j++) {

map[i][j] = 0;

}

}

}

(6)初始化构造方法

生成新地图,开启线程。

Tetrisblok() {

newmap();

drawwall();

newblock();

timer= new Timer(s, new TimerListener());

timer.start();

}

(7)判断是否合法的方法

当前块与以固定块接触或者与下墙壁接触时,不合法,返回0,否则返回1.

public int judge(int x, int y, int blockType, int turnState) {

for (int a = 0; a < 4; a++) {

for (int b = 0; b < 4; b++) {

if (((shapes[blockType][turnState][a * 4 + b] == 1) && (map[x //当前块与已固定块接触

+ b + 1][y + a] == 1))

|| ((shapes[blockType][turnState][a * 4 + b] == 1) && (map[x //当前块与墙接触

+ b + 1][y + a] == 2))) {

return 0;

}

}

}

return 1;

}

(8)消行的方法

用c来对第i行计数,如果c=10,则表示第i行已满,score+=10,这一行消除,上面所有方块下降一行,即map[e][d] = map[e][d - 1]。

public void delline() {

int c = 0;

int d = 0;

int e = 0;

for (int b = 0; b < 22; b++) {

for (int a = 0; a < 12; a++) {

if (map[a][b] == 1) {

c = c + 1;

if (c == 10) {

score += 10;

for (d = b; d > 0; d--) {

for (e = 0; e < 11; e++) {

map[e][d] = map[e][d - 1];

}

}

}

}

}

c = 0;

}

}

(9)判断游戏结束的方法

public int gameover(int x, int y) {

if (judge(x, y, blockType, turnState) == 0) {

return 1;

}

return 0;

}

(10)把当前块添加到map的方法

public void add(int x, int y, int blockType, int turnState) {

int j = 0;

for (int a = 0; a < 4; a++) {

for (int b = 0; b < 4; b++) {

if (map[x + b + 1][y + a] == 0) {

map[x + b + 1][y + a] = shapes[blockType][turnState][j];

}

j++;

}

}

}

(11)画方块的方法

public void paintComponent(Graphics g) {

super.paintComponent(g);

// 画当前方块

for (j = 0; j < 16; j++) {

if (shapes[blockType][turnState][j] == 1) {

g.fillRect((j % 4 + x + 1) * 20, (j / 4 + y) * 20, 20, 20);

}

}

// 画已经固定的方块

for (j = 0; j < 22; j++) { //方块

for (i = 0; i < 12; i++) {

if (map[i][j] == 1) {

g.fillRect(i * 20, j * 20, 20, 20);

}

if (map[i][j] == 2){ //边框

g.drawRect(i * 20, j * 20, 20, 20);

}

}

}

// 画下一方块

for (j = 0; j < 16; j++) {

if (shapes[blockType1][turnState1][j] == 1) {

g.fillRect((j % 4 +15) * 20, (j / 4 +5) * 20, 20, 20);

}

}

g.setFont(new Font("黑体",Font.BOLD,30));

g.drawString("score=" + score, 250, 40);

g.drawString("制作人:", 250, 250);

g.drawString("鞠英杰", 350, 300);

g.drawString("张浩", 350, 350);

g.drawString("陈传志", 350, 400);

}

(12)定时监听器

我们用为Time(s,new TimeListener())类创建一个对象time,其中s是间隔时间。time.start()放法会每隔一段时间调用Timelistener的接口中的方法Public void actionPerformed(ActionEvent e)。因为俄罗斯方块是往下落的,所有在这个Timelistener 类中,我们会用到方块的纵坐标y,来让它每隔一段时间下落,我们还会每时每刻来用blow(x,y,blockType,turnState)监听他是否方法合法,调用delline()方法监听是否消行,如果方块放落,调用add()方法来将方块加到地图中,然后调用newlblock()方法来生成新的方法。

代码:class TimerListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

repaint();

timer.setDelay(s);

if(flag==0){

if (judge(x, y + 1, blockType, turnState) == 1) {

y = y +(z+1)%2;

delline();

}

if (judge(x, y + 1, blockType, turnState) == 0) {

add(x, y, blockType, turnState);

delline();

newblock();

}

}

}

}

(13)键盘监听

我们在主类中,为Tetrisblok 创建对象a,用addkeylistener(a),来加键盘监听,我们为上,下,左,右,暂停,加了键盘监听,当事件发生时,会调用创建a的类的借口中的方法public void keyPressed(keyEvent e),这个方法会控制方块的移动和暂停功能。

代码:public void keyPressed(KeyEvent e) {

switch (e.getKeyCode()) {

case KeyEvent.VK_DOWN:

if(z==0)down();

break;

case KeyEvent.VK_UP:

if(z==0)turn();

break;

case KeyEvent.VK_RIGHT:

if(z==0)right();

break;

case KeyEvent.VK_LEFT:

if(z==0)left();

break;

case KeyEvent.VK_P ;

if(z==1)z=0;

else z=1;

break;

}

}

(14)移动的方法

下:在方法中public void down()中,我们来先调用方法judge(x, y + 1, blockType, turnState)来判断他是否还能下落,如果能下落则让方块的纵坐标y+1;并且调用delline()来判断是否消行。如果不能下落,我们用add(x, y, blockType, turnState)方法将方块加入到地图中,并用delline()来判断是否消行,并且生成新的方块。最后用repaint()来重绘面板。代码:public void down() {

if (judge(x, y + 1, blockType, turnState) == 1) {

y = y + 1;

delline();

}

if (judge(x, y + 1, blockType, turnState) == 0) {

add(x, y, blockType, turnState);

newblock();

delline();

}

repaint();

}

左:在public void left()方法中,我们先用judge(x,-1 y , blockType, turnState)来判断他能否左移,如果能则横坐标x=x-1;然后repaint()重绘面板。

代码:// 左移的方法

public void left() {

if (judge(x - 1, y, blockType, turnState) == 1) {

x = x - 1;

}

repaint();

}

右:在public void right()方法中,我们先用judge(x,+1 y , blockType, turnState)来判断他能否右移,如果能则横坐标x=x+1;然后repaint()重绘面板。

// 右移的方法

public void right() {

if (judge(x + 1, y, blockType, turnState) == 1) {

x = x + 1;

}

repaint();

}

(15)变换方法:

public void turn()中,定义一个int型变量tempturnState 来记住turnState的值。然后更新方块状态turnState,调用judge(x, y, blockType, turnState)来判断是否变换合法,如

果不合法,则不变方块的状态。

代码:public void turn() {

int tempturnState = turnState;

turnState = (turnState + 1) % 4;

if (judge(x, y, blockType, turnState) == 1) {

}

if (judge(x, y, blockType, turnState) == 0) {

turnState = tempturnState;

}

repaint();

} }

3.添加背景音乐

使用了applet和AudioClip ,用URL这个统一资源定位符来添加wav格式的背景音乐

public class PlayMusic {

public void play() {

AudioClip read = loadSound();//建立对象

read.loop();//循环播放

}

public static AudioClip loadSound() {

URL url = null;

try {

url = new URL("file:" + "background.wav");

} catch (MalformedURLException e) {

;

}

return JApplet.newAudioClip(url);//返回到AudioClip

}

}

三.软件系统测试

1.游戏过程测试,测试结果见图3.1

图3.1 游戏界面

2.帮助界面测试,见图

3.2

图3.2 帮助界面

3.游戏失败界面测试,见图3.3a 和图3.3b

图3.3a 游戏失败

图3.3b 询问是否开始新游戏

四.参考材料及文献

Java课本

Java入门

JDK APl1.8

五.姓名和联系方式

六.对该课程学习的任何意见和建议:

这一学期,我们第一次接触java这门重要的基础编程语言,通过学习,我们对这门语言有了深入的了解,学会了编写代码实现简单的小程序,甚至是用它来制作我们喜欢玩的游戏,这让我们对java充满了热情和动力。感谢老师一路以来的帮助和指导。

我们对java课的意见或建议是,希望老师以后在布置课后题的时候,不要把源代码也发给学生,不然会有偷懒的人,只是看看代码就觉得自己会了,根本不回去动脑想,导致最后可能达不到老师和我们想要的结果。所以建议老师在课后布置题目,学生回去做完后,老师再给讲解一下。

七.其他值得包含的内容

1.界面友好性:我们做的这个俄罗斯方块可以让它更加的美观,比如加上背景,方块

颜色,甚至是方块消失特效及声音。

2.功能的完善:背景音乐可以设置为选择播放;增加更多快捷键等。

3.游戏的体验:玩法可以增加,使游戏不会枯燥;加入排行榜可以了解你的游戏能力

在一个什么水平上。

俄罗斯方块游戏的开发需求分析

俄罗斯方块游戏的开发 组长:XXX 组员:XXX XXX XXX XXX 05软件工程一班 一、课程设计的目的和意义 俄罗斯方块游戏是一个经典的小游戏,由于它简单有趣,因而得到了广泛的流行,男女老幼都适合。而俄罗斯方块游戏的设计工作复杂且富有挑战性,它包含的内容多,涉及的知识广泛,与图形界面联系较大,包括界面的显示与更新、数据收集等,在设计的过程中,必将运用到各方面的知识,这对于visualbasi语言设 计者而言,是个很好的锻炼机会。 二、系统功能设计 本系统主要设计以下几种功能 1、游戏难度选择功能 游戏难度选择界面设置在程序运行开始时,一共有九种难度供玩家选择,每选一级难度,都会相应地显示出代表该难度的图片。开始时不设置任何默认的难度,如果玩家不选难度直接按“Enter”进入,将会弹出提示框,提示其先选难度再 进入。 2、方块下落、变形功能 在整个俄罗斯方块游戏中,方块的设计是核心。这里设计了一个方块类:Square(),用来生成方块以及实现块的左移、右移、向下、变形、重画、同步显 示、初始化新块等。 3、自动升级功能 当分数累积到一定大小时,系统将自动为玩家提高难度。这里设置了每消除10行方块,就增加一级难度。当难度增加的时候,方块会相应地改变颜色,以作为 对玩家的提示。 4、游戏音乐功能 游戏开始音乐就自动播放,游戏暂停与结束时音乐相应消除。 5、获取帮助功能 这里设置了一个类,用来显示帮助,按F1键就能弹出窗口,显示游戏规则。

三、系统功能设计分析 俄罗斯方块游戏根据功能的不同,设置了如下12个类:Square,Command, GameArea,GameSetting,GameOver,Help,ImagePanel,JieMian,MyPanel, MyTimer,PlayMidi,WinListener,每个类的描述如下: 1、Square,方块类。这个类中定义了生成方块的方法,用二维数组int[][]pattern,存放7种方块的四种状态。在构造方法中以随机的形式生成方块,同时提供了以下几种方法:reset(),leftTurn(),leftMove(),rightMove(),fallDown(),assertValid(int t,int s,int row,int col),dispBlock(int s)。分别实现方块的重画、翻转、 左移、右移、下落、同步显示等功能。 2、Command,处理控制类。这是一个实现ActionListener接口的类,主要处理点击按钮事件。类中定义了三个int型变量:button_play,button_quit,button_pause,和一个boolean型的变量:pause_resume,并赋值。在GameArea类中通过事件响应,在按钮执行方法中调用其值,使用switch语句,根据不同按钮不同的值, 来响应不同的事件。 3、GameArea,游戏界面类。GameArea继承了JFrame,是俄罗斯方块的主要游 戏界面。这个类定义了GameSetting类的gameScr对象和ImagePanel类的imagepanel对象作为游戏区域面板和控制区域面板。在游戏区域,主要是根据相应格子的设置标志来显示相应的图形图片,这样就实现了俄罗斯方块的实时显 示。 4、GameSetting,游戏画布类。这个类生成的对象将作为游戏界面的方块下落区域,画布的设置为15行10列,当中的方格边长为30,类中还定义了一个二维数组int[][]scrArr作为屏幕数组,表示每一个方格。游戏区域中每一个方格是否存在游戏方块是由该方格的值来决定的,如果该方格的值为1,则表示该方格中存在游戏方块;如果该方格中的值为0,则表示该方格中不存在游戏方块,因此二维数组用于记录游戏区域中每个小方格的值。此外,类中还定义了画方块的方法,根据不同的难度画出不同颜色的方块。单击Play按钮时,系统调用initScr()方法,初始化屏幕,将屏幕数组清零。当满足满行删除的条件时,系统调用deleteFullLine()方法,进行删行加分,而且每删除十行,难度自动增加一级,方块颜色改变,并在难度显示框中相应显示。 5、GameOver,游戏结束弹出提示框类。当游戏结束时,系统弹出提示,包括玩 家分数以及询问玩家要继续游戏还是退出。 6、Help,帮助类。在游戏界面,按F1键,弹出提示窗口,获取帮助。 7、ImagePanel,背景图片类。这个类继承了JPanel类,用来作为游戏界面中控 制区域的容器,并添加图片。 8、JieMian,主界面类。这个类继承了JPanel类,作为游戏的第一个界面,也是难度选择界面。定义了9个单选按钮,当玩家未选任何难度就按Enter时,系统会弹出一个提示框,提示玩家先选难度再进入。 9、MyPanel,重写MyPanel类,使Panel的四周留空间。

俄罗斯方块C语言代码

【转载】88行代码实现俄罗斯方块游戏(含讲解) 来源:https://www.360docs.net/doc/982678444.html,/p/8 在正式阅读本文之前,请你记得你应该用娱乐的心态来看, 本代码所使用到的技巧,在工作了的人眼里会觉得很纠结,很蛋疼,很不可理喻,很丑, 注意,是你蛋疼,不关我的事 通常,写一个俄罗斯方块,往往动不动就几百行,甚至上千行,而这里只有88行 正所谓头脑风暴,打破常规。这里将使用很多不平常的手段来减少代码 以下是Win-TC可以成功编译并执行的代码(代码保证单行长度不超过80字符,如果你是Win7系统,那请看后文): 程序代码: #include"graphics.h" #include #include int gcW = 20, gcColor[] = {DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA,MAGENTA, YELLOW}; struct tetris { int _pool[16][32], (*pool)[32], tmap[8][4][16]; int x, y, s, st, t; }gt; void trsInit() { int sp[8][4] = {{15,4369},{23,785,116,547},{71,275,113,802}, {39,305,114,562},{54,561},{99,306},{51,51},{-1}}; int *p, i, j, b; for (p = sp[0]; *p >= 0; ++p) if ( *p == 0 ) *p = p[-2]; gt.pool = >._pool[4]; for (j = 0; j < 7; ++j) for (i = 0; i < 4; ++i) for (b = 0; b < 16; ++b) gt.tmap[j+1][i][b] = (sp[j][i] & 1) * (j + 1), sp[j][i] >>= 1; memset(gt._pool, -1, sizeof(gt._pool));

基于Java语言的俄罗斯方块游戏课程设计

基于Java语言的 俄罗斯方块游戏课程设计 学院:X 专业:X 班级:X 姓名:X 学号:X 指导老师:X

摘要 第一章引言 1.1 设计的课题背景 1.2 研究课题的任务,目的和意义 1.2.1 课题的任务 1.2.2 课题的目的 1.2.3 课题的意义 1.3 系统的主要功能和特色 1.3.1 系统的主要功能 1.3.2 系统的特色 第二章系统需求分析 2.1 本课题研究现状分析 2.2 要解决的问题及解决方法 2.3 系统设计的主要内容、目标 2.3.1 系统设计的主要内容 2.3.2 设计的目标 2.4 使用的关键技术 第三章系统的详细设计 3.1 系统的总体系结构 3.2 系统各模块的界面设计及实现 3.2.1 主窗体程序模块设计与实现 3.2.2 方块变换模块设计与实现 3.2.3 满行消除并计分模块设计与实现第四章系统的安装与测试 4.1 系统的安装 4.1.1 系统的运行环境 4.1.2 系统的安装 4.2 系统的测试 结束语

参考文献 附录:有关程序代码

摘要: 在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。为此,我设计了一款简单的俄罗斯方块JAVA 游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我学到编程技术。 关键字:俄罗斯方块游戏、Java语言、编程

C语言课程设计俄罗斯方块源代码

1、新建“.h”头文件,将“头文件” 代码粘贴至其中, 2、新建“.c”源文件,将“源代码” 代码粘贴到其中。 3、新建空白工程,将头文件和源代码 添加进去,调试使用。 //头文件 //1.自定义枚举类型,定义7种形态的游戏方块 typedef enum tetris_shape { ZShape=0, SShape, LineShape, TShape, SquareShape, LShape, MirroredLShape }shape; //2.函数声明 //(1)操作方块函数 int maxX();//取得当前方块的最大x坐标 int minX();//取得当前方块的最小x坐标 void turn_left();//当前方块逆时针旋转90度 void turn_right(); int out_of_table(); void transform(); int leftable(); int rightable(); int downable(); void move_left(); void move_right(); //(2)操作游戏桌面的函数 int add_to_table();

void remove_full(); //(3)控制游戏函数 void new_game(); void run_game(); void next_shape(); int random(int seed); //(4)绘图函数 void paint(); void draw_table(); //(5)其他功能函数 void key_down(WPARAM wParam); void resize(); void initialize(); void finalize(); //(6)回调函数,用来处理Windows消息 LRESULT CALLBACK WndProc (HWND,UINT,WPARAM,LPARAM); //源代码 //1.文件包含 #include #include #include #include"tetris.h" //2.常量定义 #define APP_NAME "TETRIS" #define APP_TITLE "Tetris Game" #define GAMEOVER "GAME OVER" #define SHAPE_COUNT 7 #define BLOCK_COUNT 4 #define MAX_SPEED 5 #define COLUMS 10 #define ROWS 20 #define RED RGB(255,0,0)

java课程设计报告材料-俄罗斯方块

JAVA程序设计课程设计 之 俄罗斯方块 年级:13级 班级:T412 网络工程 指导老师:朱林 小组成员: 20138346021 许浩洋

时间:2015年11月11日 目录 摘要................................................................. 第一章课程设计要求.................................................. 第二章设计概要...................................................... 2.1 功能设计...................................................... 2.2 功能分析...................................................... 2.2.1 系统操作界面............................................... 2.2.2 程序主要功能说明........................................... 第三章调试分析与测试结果............................................ 3.1 游戏运行界面.................................................. 3.2 测试项目...................................................... 3.2.1 功能区按键测试............................................ 3.2.2 键盘功能测试.............................................. 3.2.3 游戏结束测试.............................................. 第四章设计总结...................................................... 4.1 改进意见...................................................... 4.2 《Java课程设计》心得体会 ......................................

俄罗斯方块完整源代码

//不多说,直接可以拷贝下面的东西,就可以运行。 package day04; import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.applet.*; import https://www.360docs.net/doc/982678444.html,ng.String.*; import https://www.360docs.net/doc/982678444.html,ng.*; import java.io.*; public class ERSBlock extends JPanel implements ActionListener,KeyListener//应该是继承JPanel { static Button but[] = new Button[6]; static Button noStop = new Button("取消暂停"); static Label scoreLab = new Label("分数:"); static Label infoLab = new Label("提示:"); static Label speedLab = new Label("级数:"); static Label scoreTex = new Label("0"); static Label infoTex = new Label(" "); static Label speedTex = new Label("1");

static JFrame jf = new JFrame(); static MyTimer timer; static ImageIcon icon=new ImageIcon("resource/Block.jpg"); static JMenuBar mb = new JMenuBar(); static JMenu menu0 = new JMenu("游戏 "); static JMenu menu1 = new JMenu("帮助 "); static JMenuItem mi0 = new JMenuItem("新游戏"); static JMenuItem mi1 = new JMenuItem("退出"); static JMenuItem mi1_0 = new JMenuItem("关于"); static JDialog dlg_1; static JTextArea dlg_1_text = new JTextArea(); static int startSign= 0;//游戏开始标志 0 未开始 1 开始 2 暂停 static String butLab[] = {"开始游戏","重新开始","降低级数","提高级数","游戏暂停","退出游戏"}; static int game_body[][] = new int[19][10]; static int game_sign_x[] = new int[4];//用于记录4个方格的水平位置 static int game_sign_y[] = new int[4];//用于记录4个方格的垂直位置

俄罗斯方块Java程序设计

俄罗斯方块游戏 一、课题内容和要求 课题内容:俄罗斯方块游戏(Tetris)是一款经典单机游戏,早期常见于各个平台。设计一个俄罗斯方块,玩家根据下落的不同方块形状,通过上、下、左、右四个键实现对方块的左右移动、旋转、下落等控制。游戏中,一共有7种不同的方块形状、每种方块以1/7的概率随机出现,一旦方块到达顶部,游戏结束。当某一个行布满方块时,改行消除。 基本要求:通过图形界面实现俄罗斯方块游戏;能以图形显示游戏运行的过程;实现相应四个键游戏玩家的控制;记录消除的行数。 扩展要求:在上述功能要求的基础上,为了提高成绩,可以添加一些额外的功能;变量、方法命名符合规范;注释详细:每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释;程序的层次清晰,可读性强。 系统功能要求: (1)界面设定 玩家可以在界面左侧的游戏区中堆积方块,游戏区上面有“游戏”“帮助”两个选项,界面右侧为游戏得分,玩家在游戏过程中随时可以查看游戏得分。(2)游戏控制 不同的随机图形会从区域上方缓慢落下,通过键盘的左、右、下键可以控制方块以一格为单位左右移动,长按实现快速移动;上键能以90度为单位旋转每一方块;区域中横向格子方块填满,则该行会自动消除并为玩家的得分;当固定的方块推到区域最上方,则游戏结束。 二、需求分析 1.需求分析

图-1 俄罗斯方块游戏需求分析 2.任务及实现方式 (1)绘制游戏区域 通过绘制地图方块、已经固定的方块和运动中的方块来实现(2)实现键盘对方块的实时控制 添加键盘监听者和方块位置移动的函数 (3)记录消除行数 添加记分函数和Graphics类的drawString函数实现 (4)游戏结束 添加判断游戏结束函数并给出提示 3.预期效果 (1)实现俄罗斯方块游戏的动态显示 (2)实现键盘对方块各种操作 (3)实现消行、记分 (4)游戏能够正确结束

俄罗斯方块程序代码

//包含头文件 #include #include #include #include #include #include "Tetris.h" //int score=0; //int lever=1; //char scores[10]; //char levers[10]; /* enum cmd { round, //旋转方块 left, //左移方块 right, //右移方块 down, //下一方块 bottom, //方块沉底 quit //离开游戏 }; //定义绘制方块的状态的枚举类型 enum draw { show, //显示方块 hide //抹掉方块 }; //定义俄罗斯方块的结构体 struct block { int dir[4]; //方块的四个旋转的状态 int color; //方块的颜色 }*/ static T_TrsBlockStyle gz_tBlockStyleTab[7] = {/* 口口 口口口口口口口口口口 口口 口口*/ {0x0F00, 0x4444, 0x0F00, 0x4444, RED}, /*

口口口口口口口口 口口口口口口口口 */ {0x0660, 0x0660, 0x0660, 0x0660, BLUE}, /* 口 口口口口口口口 口口口口口口口 口*/ {0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA}, /* 口 口口口口口口口 口口口口口口口 口*/ {0x2260, 0x0E20, 0x0644, 0x0470, YELLOW}, /* 口口 口口口口口口口口 口口口口口口 */ {0x0C60, 0x2640, 0x0C60, 0x2640, CYAN}, /* 口口 口口口口口口口口 口口口口口口 */ {0x0360, 0x4620, 0x0360, 0x4620, GREEN}, /* 口口口 口口口口口口口口口口 口口口 */ {0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN}}; /* //定义俄罗斯方块的信息的结构体 struct blockinfo { int id; //7中方块中的哪一种 byte dir:2; //1种方块中四个方向中的哪个 char x,y; //方块的坐标(不是屏幕中的而是自己设置的游戏区域中的)} curblock,nextblock; */ // 定义游戏区 //unsigned char area[width][high] = {0}; //函数声明

Java俄罗斯方块 毕业设计论文

第1章绪论 (2) 1.1 游戏的历史 (2) 1.2游戏的意义与内涵 (3) 1.3 俄罗斯方块游戏 (4) 第2章可行性研究 (6) 2.1 设计目的 (6) 2.2 可行性研究前提 (6) 2.3 可行性分析 (6) 2.4 结论 (7) 第3章需求分析 (8) 3.1 引言 (8) 3.2 游戏功能需求 (8) 3.3 运行环境及系统性能的需求 (9) 3.4 接口需求 (9) 3.5 方案论证 (9) 3.6.方案选择 (11) 第4章概要设计 (13) 4.1 游戏设计所要遵循的规范 (13) 4.2 游戏总体设计分析 (13) 4.3 各模块的算法设计 (14) 4.4 可靠性设计 (19) 4.5 概要设计评审 (19) 第5章详细设计 (21) 5.1 客户端设计 (21) 5.2音效播放控制模块设计 (23) 5.3背景音乐播放控制模块设计 (24) 5.4网络对战模块设计 (25) 5.5道具模块设计 (26) 5.6 主模块——方块与地图模块设计 (31) 第6章游戏测试 (42) 6.1 测试的意义及注意事项 (42) 6.2测试的步骤 (43) 6.3 测试结果 (44) 结束 (46) 致谢 (47)

第1章绪论 1.1 游戏的历史 游戏是人类生活的重要组成部分,从第一个电子游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。 1.1.1 从头谈起 真正的电子游戏机产生于20世纪70年代。1971年,麻省理工学院的学生Nolan Bushnell设计了世界上的第一个业务用游戏机(俗名街机),叫做《电脑空间》。这台游戏机用一台黑白电视机作为显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的发展上取得了非凡的成就。 上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到1972年,一个叫Crowther的工程师用当时最流行的主机――DEC公司的PDP-10编写一段简单的FORTRAN程序。在这个程序里,Crowther设计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。这个程序被公认为是最早的电脑游戏程序。 1989年,BroderBund公司的设计师乔丹.麦克纳根据阿拉伯民族的古老传说《一千零一夜》在Apple平台上制作了一部动作冒险相结合的电脑游戏――波斯王子。这个游戏获得了第一作,它代表了当时电脑技术的最高水平。 1986年,任天堂公司发售了一款真正的游戏巨作――超级马里奥。 20世纪80年代IBM PC兼容机的出现打破了Apple公司的垄断地位。 到了20世纪90年代,游戏业才真正成熟起来,成为了一种产业。 由于PC机价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。 1.1.2 图形硬件的革命 图形硬件的飞速发展是近些年来的事情,部分原因是来自工业方面的压力,例如在军事和医疗方面对于实时图形的需求很强烈,而交互娱乐产业也极大的推动了图形硬件的发展。技术上的因素同样也推动着图形硬件的发展,许多图形算

Java小游戏俄罗斯方块附完整源代码_毕业设计

**** 届毕业设计Java小游戏俄罗斯方块

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊ 摘要 在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为老少皆宜的娱乐方式。但是游戏设计结合了日新月异的技术,在一个产品中整合了复杂的设计、艺术、声音和软件,所以并不是人人皆知。直到今天,在中国从事游戏设计的人仍然很少,但是游戏行业的发展之快,远超如家电、汽车等传统行业,也正因为如此,游戏人才的教育、培养远落后于产业的发展。 俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机时钟控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,(控制键的实现是由键盘的方向键的事件处理实现)。然后程序根据这七种方块堆叠成各种不同的模型。 论文描述了游戏的历史,开发此游戏的环境,游戏开发的意义。遵循软件工程的知识,从软件问题定义开始,接着进行可行性研究、需求分析、概要设计、详细设计,最后对软件进行了测试,整个开发过程贯穿软件工程的知识体系。 此次设计在Microsoft Windows 7系统下,以Java为开发语言,在eclipse开发平台上进行游戏的设计与实践。从游戏的基本玩法出发,主要就是俄罗斯方块的形状和旋转,我在设计中在一个图片框中构造了一些的网状小块,由这些小块组合成新的形状,每四个小块连接在一起就可以构造出一种造型,因此我总共设计了7中造型,每种造型又可以通过旋转而变化出2到4种形状,利用随机函数在一个欲览窗体中提前展示形状供用户参考,在游戏窗体中用户就可以使用键盘的方向键来控制方块的运动,然后利用递归语句对每一行进行判断,如果有某行的方块是满的,则消除这行的方块,并且使上面的方块自由下落,最后就可以得出用户的分数。 关键词:游戏设计,算法,数组,事件

JAVA俄罗斯方块实验报告

目录 一.需求分析........................ 错误!未定义书签。二.系统运行环境 (2) 三.系统功能需求描述: (2) 四.总体设计 (2) 五.系统结构图 (3) 六.程序模块设计 (3) 七、实验总结体会 (15)

一.需求分析 在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。 此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。 二.系统运行环境 操作系统选择Windows XP 版本,运行环境选择MyEclipse 三.系统功能需求描述 俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。本软件要实现的功能如下: 1.游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。 2.游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。 3.级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏速度越快,难度越大。 四.总体设计 游戏中玩家可以做的操作有: 1.以90度为单位旋转方每一格块。 2.以格子为单位左右移动方块,让方块加速落下。 3.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。 4.当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。同时删除的列数越多,得分指数上升。 5.当固定的方块堆到区域最上方,则游戏结束。

C#俄罗斯方块(附代码)

C#俄罗斯方块程序设计 姓名: 学号: 专业:计算机科学与技术学院 班级:级班 时间:2009—2010年第一学期 该实验制作的是小游戏----俄罗斯方块 1.可实现以下基本功能: 用户可自定义添加或删除方块样式及颜色; 用户可自定义修改游戏背景颜色及按键设置。 2.另增加了几个功能: 按键设置改变后点击保存,会弹出对话框提示“保存成功”; 点击“开始”运行游戏,背景音乐自动播放,点击暂停后,背景音乐也随之停止;每消除一行,会有特效声音提示消除成功; 根据消行多少会自动加分并显示。

游戏界面效果图如下: 配置窗体效果图如下:

砖块样式配置效果图如下:

游戏设计分为如下九个部分: 一,新建窗体“配置窗体”(TrmConfig)添加TabControl控件

(1)砖块样式配置 I.abel控件(lblMode) 点击“事件”,选择“Paint” Graphics gp=e.Graphics; gp.Clear(Color.Black); Pen p=new Pen(Color.White); for (int i=31;i<155;i=i+31) gp.DrawLine(p,1,i,155,i); for (int i=31;i<155;i=i+31) gp.DrawLine(p,i,1,i,155); SolidBrush s=new SolidBrush(blockColor); for (int x=0;x<5;x++) { for(int y=0;y<5;y++) { if(struArr[x,y]) { gp.FillRectangle(s,31*x+1,31*y+1,30,30); } } } 点击“事件”,选择“MouseClick” private bool[,] struArr=new bool[5,5]; private Color blockColor=Color.Red; -------------------------------------------------------- if (e.Button!=MouseButtons.Left) return; int xPos,yPos; xPos=e.X/31; yPos=e.Y/31; struArr[xPos,yPos]=!struArr[xPos,yPos]; bool b=struArr[xPos,yPos]; Graphics gp=lblMode.CreateGraphics(); SolidBrush s=new SolidBrush(b ? blockColor:Color.Black); gp.FillRectangle(s,31*xPos+1,31*yPos+1,30,30); gp.Dispose(); II.添加ColorDialog控件 添加label(lblColor)控件 点击“事件”,选择“click” colorDialog1.ShowDialog(); blockColor=colorDialog1.Color; lblColor.BackColor=colorDialog1.Color;

java编写俄罗斯方块实验报告

前言 实习时间: 实习学时:36学时 实习地点:北京科技大学信息楼 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun 公司于1995年5月推出的Java程序设计语言和Java 平台的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针、运算符重载、多重继承等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在Java 1.5 版本中,Java 又引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 Java 不同于一般的编译执行计算机语言和解释执行计算机语

言。它首先将源代码编译成二进制字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了Java 程序的运行效率。 实习目的和要求 认识实习是教学计划的主要部分之一,它是培养学生实践能力和解决实际问题的第三课堂,它是专业知识培养的摇篮,也是对专业的实际应用和工作需求直接的认识与认知。实习中应该深入实际,认真观察,大胆实践,获取直接经验,巩固所学基本理论,保质保量完成指导老师所布置的任务。要习惯本专业工作的性质,要学会耐得住寂寞,在看似枯燥的编程中寻找兴趣点,大胆想象,培养我们的实践能力和创新能力,开拓视野,培养实际中研究、观察、分析、解决问题的能力。 认识实习是我们工科学生的一门必修课,通过认识实习,我们要对通信工程专业建立感性认识,并进一步了解专业的学习实践环节,培养自己专业的思想。通过接触实际实习过程,一方面,达到对所学专业的性质、内容及其在工程技术领域中的地位有一定的认识,为了解和巩固专业思想创造条件,在实践中了解专业、熟悉专业、热爱专业。另一方面,巩固、加深理解在课堂所学的理论知识,让自己的

C语言俄罗斯方块游戏源代码

/*学无止境*/ #include <> #include <> #include <> #define ESC 27 #define UP 328 #define DOWN 336 #define LEFT 331 #define RIGHT 333 #define BLANK 32 #define BOTTOM 2 #define CANNOT 1 #define CAN 0 #define MAX 30 #define F1 315 #define ADD 43 #define EQUAL 61 #define DEC 45 #define SOUNDs 115 #define SOUNDS 83 #define PAUSEP 80 #define PAUSEp 112

void Init(); void Down(); void GoOn(); void ksdown(); void Display(int color); void Give(); int Touch(int x,int y,int dx,int dy); int GeyKey(); void Select(); void DetectFill(); void GetScores(); void Fail(); void Help(); void Quit(); void DrawBox(int x,int y,int Color); void OutTextXY(int x,int y,char *String); void DispScore(int x,int y,char Ch); void DrawNext(int Color); int Heng=12,Shu=20; /*横竖*/ int Position[MAX][MAX]; int middle[MAX][MAX]; int ActH,ActS;

JAVA--俄罗斯方块实验报告

目录 一.需求分析 (2) 二.系统运行环境 (2) 三.系统功能需求描述: (2) 四.总体设计 (2) 五.系统结构图 (3) 六.程序模块设计 (3) 七、实验总结体会 (15)

一.需求分析 在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众的认可,因此开发此游戏软件可满足人们的一些娱乐的需求。 此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。 二.系统运行环境 操作系统选择Windows XP 版本,运行环境选择MyEclipse 三.系统功能需求描述 俄罗斯方块游戏是一款适合大众的游戏软件,它适合不同年龄的人玩。本软件要实现的功能如下: 1.游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随时了解得分情况。 2.游戏控制:玩家可以通过游戏控制功能来选择开始新的一局游戏,暂停或退出游戏。 3.级别设置:玩家可以根据自己的需要自行设定游戏的开始级别,级别越高,游戏速度越快,难度越大。 四.总体设计 游戏中玩家可以做的操作有: 1.以90度为单位旋转方每一格块。 2.以格子为单位左右移动方块,让方块加速落下。 3.方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。 4.当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。同时删除的列数越多,得分指数上升。 5.当固定的方块堆到区域最上方,则游戏结束。

俄罗斯方块C语言代码

#include #include #include #include #include #ifdef__cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif #define MINBOXSIZE 15 /* 最小方块的尺寸*/ #define BGCOLOR 7 /* 背景着色*/ #define GX 200 #define GY 10 #define SJNUM 10000 /* 每当玩家打到一万分等级加一级*/ /* 按键码*/ #define VK_LEFT 0x4b00 #define VK_RIGHT 0x4d00 #define VK_DOWN 0x5000 #define VK_UP 0x4800 #define VK_HOME 0x4700 #define VK_END 0x4f00 #define VK_SPACE 0x3920 #define VK_ESC 0x011b #define VK_ENTER 0x1c0d /* 定义俄罗斯方块的方向(我定义他为4种)*/ #define F_DONG 0 #define F_NAN 1 #define F_XI 2 #define F_BEI 3 #define NEXTCOL 20 /* 要出的下一个方块的纵坐标*/ #define NEXTROW 12 /* 要出的下一个方块的横从标*/ #define MAXROW 14 /* 游戏屏幕大小*/ #define MAXCOL 20 #define SCCOL 100 /*游戏屏幕大显示器上的相对位置*/ #define SCROW 60 int gril[22][16]; /* 游戏屏幕坐标*/

基于JAVA技术的俄罗斯方块游戏的设计与实现

目录 摘要 (1) 关键词 (1) 1 前言 (2) 2 需求分析 (3) 2.1 系统开发环境 (3) 2.2 系统玩法及规则 (3) 2.3 系统设计分析 (4) 2.4 注意事项 (5) 3 概要设计 (5) 3.1 系统介绍 (5) 3.2 系统简单设计 (6) 3.3 系统功能设计 (6) 3.4 系统流程 (8) 4 系统详细设计 (9) 4.1 设计游戏框架 (9) 4.2 设计游戏界面 (13) 4.3 游戏内容设计 (14) 4.3.1 方块描述 (14) 4.3.2 地图描述 (16) 4.3.3 地图方块阻碍描述 (16) 4.3.4 满行判断及删除 (16) 4.3.5 线程控制的实现 (17) 4.3.6 控制游戏开始 (17) 4.3.7 控制游戏暂停 (17) 4.3.8 控制游戏结束 (17) 4.3.9 控制方块自动下降 (18)

4.3.10 预备方块区的上移效果 (19) 4.3.11 键盘事件处理 (19) 4.4 游戏其它功能的实现 (20) 4.4.1 添加状态栏 (20) 4.4.2 添加关于对话框 (20) 4.4.3 添加音响效果 (22) 4.4.4 得分情况封装 (23) 4.4.5 成绩的录入 (25) 5 系统实现 (28) 5.1 登入界面 (28) 5.2 游戏主界面 (28) 5.3 游戏结束显示框 (29) 5.4 成绩排行榜 (30) 6 系统测试 (30) 6.1 测试举例 (30) 6.2 测试项目 (31) 6.3 测试方法 (32) 7 设计小结 (33) 7.1 出现的问题及解决方法 (33) 7.2 游戏存在的不足 (35) 7.3 结论 (35) 参考文献 (36) 致谢 (37) 附录 (38)

《俄罗斯方块》程序编写超详细解释

Tc2.0 编写俄罗斯方块游戏 很多编程爱好者都编写过俄罗斯方块的游戏程序。很久以前,我用Tc2.0也做过一个;最近有好些朋友看见我以前的俄罗斯方块的程序后, 问我是怎么做的。我一直想把这个程序的整个过程写一份详细的东西,与各位编程爱好者分享,一直没空。正好现在放假了,而且离回家还有几天。于是我就把这个程序重新写了一遍,尽量使程序的结构比较清晰好懂一些。同时写了下面的这份东西。 俄罗斯方块游戏的程序中用到了一些方法。为了比较容易理解这些方法,我在讲述的同时写了些专门针对这些方法的示例程序。这些示例程序力求短小,目的是用最小的代码能够清楚的示例所用的方法。这些示例程序都经过tc2.0测试。最后还附了完整的俄罗斯方块游戏的源代码,和最终的可执行程序。如果你看了这份东东,有什么意见和想法,请发电子邮件告诉我。我将会继续更新这分东东,最新的版本可以在我的个人主页上下载。 下面的问题是有关俄罗斯方块程序的,其中有些是朋友问我的,有些是我认为可能会被问到的。我尽量按问题从易到难排列这些问题。关于俄罗斯方块程序的一些问题: ****************************************************** Tc2.0中怎么样设置图形显示? Tc2.0中常用图形函数的用法? 怎样获取鍵盘输入? 怎样控制方块的移动? 怎样控制时间间隔(用于游戏中控制形状的下落)? 游戏中的各种形状及整个游戏空间怎么用数据表示? 游戏中怎么判断左右及向下移动的可能性? 游戏中怎么判断某一形状旋转的可能性? 按向下方向键时加速某一形状下落速度的处理? 怎么判断某一形状已经到底? 怎么判断某一已经被填满? 怎么消去已经被填满的一行? 怎么消去某一形状落到底后能够消去的所有的行?(如长条最多可以消去四行) 怎样修改游戏板的状态? 怎样统计分数? 怎样处理升级后的加速问题? 怎样判断游戏结束? 关于计分板设计的问题。 关于“下一个”形状取法的问题。 剩下的问题。 ****************************************************** 新的问题: 我想有一个最高记录的显示,应该怎么做呀? 我想实现一个进度存储功能,应该怎么做呀?

相关文档
最新文档