C语言编写俄罗斯方块论文_俄罗斯方块c语言论文
C语言编写俄罗斯方块论文由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“俄罗斯方块c语言论文”。
俄罗斯方块
学 号:
班 级:
姓 名:
指导教师:
完成日期:2012年5月
目
录
1.引言..............................................................................................................................................1
1.1开发工具............................................................................................................................1 1.1.1 C是中级预言......................................................................................................1
1.1.2 C是结构化语言..................................................................................................1 1.1.3 C语言功能齐全..................................................................................................1 1.1.4 C语言可移植性好..............................................................................................1游戏设计......................................................................................................................................2
2.1游戏设计要求....................................................................................................................2
2.1.1.设计题目:俄罗斯方块游戏.............................................................................2
2.1.2.设计内容:.........................................................................................................2 2.1.3.功能模块划分:.................................................................................................2 2.2 游戏设计思想...................................................................................................................2
2.2.1游戏界面:............................................................................................................2 2.2.2 设计思路.......................................................................................................................2 2.3:游戏功能......................................................................................................................3 2.3.1:开始部分...........................................................................................................3
2.3.2.运行部分...............................................................................................................3
3.实验总结:..................................................................................................................................4
3.1 开发背景与需求分析.......................................................................................................4 3.2 系统功能介绍...................................................................................................................4 4.核心代码:................................................................................................................................8 总结................................................................................................................................................21 参考文献:....................................................................................................................................22
基于C语言的俄罗斯方块游戏
[摘要]:俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。[关键词]:C语言;心得体会;影响
1.引言 随着社会的发展,人们生活的步调日益加快,越来越多的人加入了全球化的世界.人们不在拘泥于一小块天地.加班,出差成了现代人不可避免的公务.而此时一款可以随时随地娱乐的游戏成了必需品.在手机和电脑成为人们日用品的社会,一款能在其上能便捷运行的游戏成为买家的参考点.现在我们所要设计的这一款基于C语言的游戏——贪吃蛇,就是满足以上要求而设计出来的,希望能给玩家带来娱乐.贪吃蛇这一游戏简单易行,操作方便,娱乐性较强,吸引了不少人.这一款游戏紧紧地抓住了人们的心理,虽然简单,却起乐无穷,在人们不断追求更多的欲望下,该游戏给人们带来了追逐的快感,以及成功后的满足感,对于一直处于高压下的现代人是很好的放松工具.1.1开发工具
《C/C++程序设计学习与试验系统》
该系统继承了Turbo C2.0/C++3.0、GCC、Visua C++6.0这四种常见的编译器,可以很好满足目前主流的C语言教材的实验需求。
C语言具有下列特点:
1.1.1 C是中级预言
它把高级语言的基本结构和语句与低级语言的实用性结合起来,C语言可以像汇编语言一样对位、字节和地址进行操作,通常还是称C为高级语言。
1.1.2 C是结构化语言
结构化语言的特点是程序的各个部分除了必要地数据交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用,维护及调试。
1.1.3 C语言功能齐全
C语言具有多种数据类型,并引入了指针概念,可使程序效率更高;C语言也具有强大的图形功能;具有较强的计算功能、逻辑判断功能。
1.1.4 C语言可移植性好
与汇编语言相比,C语言程序适用范围大,可用于各种操作系统和各种型号的计算机。游戏设计
2.1游戏设计要求
2.1.1.设计题目:俄罗斯方块游戏 2.1.2.设计内容:
一组由4个小型正方形组成的规则图形,中文通称为方块共有7种,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。通过设计者预先设置的随机发生器不断地输出单个方块到场地顶部,以一定的规则进行移动、旋转、下落和摆放,锁定并填充到场地中。每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取一定的积分或者其他形式的奖励。而未被消除的方块会一直累积,并对后来的方块摆放造成各种影响。如果未被消除的方块堆放的高度超过场地所规定的最大高度则游戏结束。
2.1.3.功能模块划分:
系统功能模块
2.2 游戏设计思想
2.2.1游戏界面:
方块堆积。遇整则消。
2.2.2 设计思路
1、一个用于摆放小型正方形的平面虚拟场地,其标准大小:行宽为10,列高为20,以每个小正方形为单位。2.、一组由4个小型正方形组成的规则图形,英文称为Tetromino,中文通称为方块共有7种,分别以S、Z、L、J、I、O、T这7个字母的形状来命名。I:一次最多消除四层
J(左右):最多消除三层,或消除二层
L:最多消除三层,或消除二层
O:消除一至二层
S(左右):最多二层,容易造成孔洞
Z(左右):最多二层,容易造成孔洞
T:最多二层
(1)部分游戏有单格方块,可以穿透固定的方块到达最下层空位。其他的改版中出现更多特别的造型。
方块会从区域上方开始缓慢继续落下。
(2)玩家可以做的操作有:以90度为单位旋转方块,以格子为单位左右移动方块,让方块加速落下。
(3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的方块出现在区域上方开始落下。
(4)当区域中某一列横向格子全部由方块填满,则该列会消失并成为玩家的得分。同时删除的列数越多,得分指数上升。
(5)当固定的方块堆到区域最上方而无法消除层数时,则游戏结束。
(6)一般来说,游戏还会提示下一个要落下的方块,熟练的玩家会计算到下一个方块,评估现在要如何进行。由于游戏能不断进行下去对商业用游戏不太理想,所以一般还会随着游戏的进行而加速提高难度。
3、通过设计者预先设置的随机发生器不断地输出单个方块到场地顶部,以一定的规则进行移动、旋转、下落和摆放,锁定并填充到场地中。每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取一定的积分或者其他形式的奖励。而未被消除的方块会一直累积,并对后来的方块摆放造成各种影响。
4、如果未被消除的方块堆放的高度超过场地所规定的最大高度(并不一定是20或者玩家所能见到的高度),则游戏结束。
具体到每一款不同的游戏,其中的细节规则都可能有千差万别,但是以上的基本规则是相同的。
2.3:游戏功能
2.3.1:开始部分
游戏是运行在图形模式下的,所以第一步一定是初始化图形模式,接着要有开始的界面,就像书有封面一样,我设置了一个游戏的标题画面,除了游戏标题画面我还设置了一个欢迎画面。标题画面以后,还要为游戏的运行部分作初始化,包括绘制游戏运行时的背景,对游戏某些重 要变量的初始化。
2.3.2.运行部分
俄罗斯方块的要求为:不同形状组合的方块从界面上方落下。通过键盘上的四个光标控制方块下落时的形状转换和下落方向。方块堆积在一起,将区域占满时则会消除以增加
游戏分数。
整个游戏过程分为三个步骤:
1、按游戏界面的“开始”按钮或者F2键来开始游戏,自己使用右边的窗口,对手使用左边的窗口
2、键盘操作:系统缺省设置使用右边的窗口,用光标操作,“←”左移一格;“→”右移一格;“↑”旋转方块;↓ 方块丢下(方块下落到底),“End”健可以一格格的下落,用户还可以自定义习惯的按键来操作游戏。
3、计分牌显示的内容:“分数”为双方本局的分数,计分标准为下落一个块10分,一次消一行100分、2行200分、3行400分、4行800分。等级”为双方的游戏设置等级,当分数达到一定的值,等级就会提升、速度加快。“行数”第一行为双方消的行数,第二行是送给对方的行数。“比分”为双方赢的局数。2.3.3:结束部分:
游戏结束时,显示“GAME OVER”
3.实验总结:
3.1 开发背景与需求分析
随着网络技术的发展,人们的生活越来越离不开网络,网络给人们带来了各种各样的信息和更多更新的娱乐。据统计。每天上网的人群中75%的人用来丰富自己的生活。其中游戏最为常见和普遍。所以,这次课程设计我想实现一个小游戏:俄罗斯方块。需求分析
1)游戏面板(画布)GameCanvas类,完成游戏显示; 2)方块绘画drawUnit类,方块下落过程中的各种形态;
3)主界面实现游戏的开始,退出,暂停,提高级数,降低级数功能及图像界面排版;
4)通过键盘按键实现游戏,并且可以调节游戏速度。
3.2 系统功能介绍
俄罗斯方块是一个非常复杂但比较有趣并且耐玩的游戏,相信很多人对俄罗斯方块并不陌生,如下图所示,游戏中共有七种方块,每种方块都有四个方格组成。
这七种方块可以旋转90度、180度、270度,因此每种方块有四种状态,七种方块总有28种状态,这28种状态的方块随机产生,自由下落,落下时可由玩家通过键盘上的上、下、左、右控制键来控制方块的反转、移动和加速下落。如果下落时,方块填满某一行则这一行消失,同时给玩家加分,若由存在空格的方块填满整个窗口,则游戏结束。
图1-1 初始状态
图1-2 开始游戏
图1-3 消除一行
图1-4 消除两行
图1-5 消除四行
图1-6 游戏结束
4.核心代码:
import java.awt.*;import java.awt.event.*;
//俄罗斯方块类
public cla computer extends Frame { public static boolean isPlay = false;public static int level = 1, score = 0;public static TextField scoreField, levelField;
public static MyTimer timer;GameCanvas gameScr;//声明一个属于画布类得变量 public static void main(String[] argus){ computer ers = new computer(“俄罗斯方块游戏 V1.0 Author:Vincent”);//运用构造方法为框架名
WindowListener win_listener = new WinListener();//定义一个窗口监听事件对象
ers.addWindowListener(win_listener);//为框架添加该监听器 }
computer(String title)// 俄罗斯方块类的构造方法 { super(title);//调用父类得构造方法
setSize(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));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);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 Dimension(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 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_levelup, gameScr));
// 定义按钮Level Down Button level_down_b = new Button(“降低级数”);level_down_b.setSize(new Dimension(50, 200));level_down_b.addActionListener(new Command(Command.button_leveldown, gameScr));
// 定义按钮Level Pause Button pause_b = new Button(“游戏暂停”);pause_b.setSize(new Dimension(50, 200));pause_b.addActionListener(new
Command(Command.button_pause,gameScr));
// 定义按钮Quit 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(pause_b);controlScr.add(quit_b);setVisible(true);gameScr.requestFocus();} }
// 重写MyPanel类,使Panel的四周留空间 cla MyPanel extends Panel { public Insets getInsets(){ return new Insets(30, 50, 30, 50);} }
// 游戏画布类
cla GameCanvas extends Canvas implements KeyListener { final int unitSize = 30;// 小方块边长 int rowNum;// 正方格的行数 int columnNum;// 正方格的列数
int maxAllowRowNum;// 允许有多少行未削 int blockInitRow;// 新出现块的起始行坐标 int blockInitCol;// 新出现块的起始列坐标 int[][] scrArr;// 屏幕数组 Block b;// 对方快的引用
// 画布类的构造方法 GameCanvas(){ rowNum = 15;columnNum = 10;maxAllowRowNum = rowNum1;blockInitCol = columnNum / 2(row + 1)* unitSize, unitSize, unitSize, true);g.dispose();}
public Block getBlock(){ return b;// 返回block实例的引用 }
// 返回屏幕数组中(row,col)位置的属性值 public int getScrArrXY(int row, int col){ if(row = rowNum || col = columnNum)return(-1);else return(scrArr[row][col]);}
// 返回新块的初始行坐标方法 public int getInitRow(){ return(blockInitRow);// 返回新块的初始行坐标 }
// 返回新块的初始列坐标方法 public int getInitCol(){ return(blockInitCol);// 返回新块的初始列坐标 }
// 满行删除方法
void deleteFullLine(){ int full_line_num = 0;int k = 0;
for(int i = 0;i
L1: for(int j = 0;j
dispBlock(0);col--;dispBlock(1);} }
// 实现块的右移
public void rightMove(){ if(aertValid(blockType, turnState, row, col + 1)){ dispBlock(0);col++;dispBlock(1);} }
// 实现块落下的操作的方法 public boolean fallDown(){ if(blockState == 2)return(false);if(aertValid(blockType, turnState, rowi, col + j);if(temp > 1;} } return true;}
// 同步显示的方法
public synchronized void dispBlock(int s){ int k = 0x8000;for(int i = 0;i
cla WinListener extends WindowAdapter { public void windowClosing(WindowEvent l){ System.exit(0);} } 总结
1感悟:当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在这么长的时间里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
我做的是做俄罗斯方块游戏。简单的一个,但对我来说却是一个很大的困难。更加是第一次做基于C语言的课程设计,所以连续几天翻阅书籍或是参考网上内容却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候
没有认真的听讲。可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以一下一步就是开始正式的编程序了。不过毕竟水平有限,还是不知如何下手,于是就在网上下了一篇类似的程序,经过仔细的研究,终于读懂了C语言编程的基本过程和方法。经过一波三折,终于开始正式编程。
而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件很无聊的事情,所以就在网上下载的程序的基础上开始行动了,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过几天的努力,终于把程序完成了,尽管程序还是有很多错误和漏洞,不过还是很高兴的。无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。
通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
在该游戏设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
2感谢:经过两个星期的苦心钻研,系统终于制作完毕。在本次课程设计中困难遇到不少,也让我学到了很多。在这次系统开发的过程中,我深深地体会到了做一个系统,首先进行需求分析的重要性。了解了一个系统的制作,从功能分析到功能模块分析,与其他系统的关系,这些都有待以后进一步的改进。通过实践对我以后的学习是一笔不小的财富!
在此,感谢班上同学对我的帮助和指点,没有他们所提供的资料,仅凭我个人力量,在短短的两周时间里是很难完成这个设计的。更要感谢的是我的老师,感谢老师孜孜不倦的教诲,一丝不苟的精神和一视同仁的教学风格。我会仅记老师的教诲,一步一个脚印的完成自己的学业!
参考文献:
[1].裘宗燕 著,从问题到程序科学出版社,北京大学出版社,1999年4月。[2].《C程序设计(第二版)》,谭浩强编,清华大学出版社,1999年12月。[3].《C语言编程常见问题解答》,[美]Paul S.R.Chishohm等著,张芳妮 吕波译,清华大学出版社,11996年12月。[4].《The C Programming Language》,by Brian W.Kernighan and Dennis M.Ritchie.,Pubilished by Prentice-Hall in 1988。
[5].朱若愚.数据结构[M].北京: 电子工业出版社, 2006.1
[6].傅清祥,王晓东.数据结构与算法设计[M].北京: 电子工业出版社, 2006.3 [7].李春葆.数据结构(C语言版)习题与解析[M].北京:清华大学出版社, 2006.1 [8].刘大有.数据结构[M].北京: 高等教育出版社, 2006.3 [9].王敬华,陈静.C语言程序设计[M].北京: 清华大学出版社, 2007.10 [10].徐孝凯.数据结构简明教程.[M].北京: 清华大学出版社, 2006.04
课程设计俄罗斯方块游戏源代码
本程序共三个类,建一个包 square。把三个类都封装到一个包里面,三个类分别是
Controller,Main,Square
package square;import javax.swing.JPanel;import java.awt.Color;
// 事倒入java程序所需要的类库文件。如果不倒入相应的文件。java程序是会报错的。import javax.swing.JLabel;public cla Controller extends Thread //Controller类从定义从父类继承来来的某些成员变量和成员方法,游戏控制线程
private int x;
//方块左上角的坐标
private int y;
private Square sq;
//方块对象的引用当前
private Square next;
//下一个方块的引用
private JPanel[][] sc;
//显示
private boolean[][] state;
//填充状态
private int sorce;
//分值
private int speed;
//下落速度
private JLabel jl1;
//分数速度提示
private JLabel jl2;
private JPanel jp;
//下一个方块提示
private JPanel[][] sc2;
private int sleepTime;
//等待时间
public Controller(int x, int y, JPanel[][] sc, boolean[][] state, //构造器
传递引用
int sorce, int speed, JLabel jl1, JLabel jl2,JPanel jp, JPanel[][] sc2){
this.x = x;
this.y = y;
this.sc = sc;
this.state = state;
this.sorce = sorce;
this.speed = speed;
this.jl1 = jl1;
this.jl2 = jl2;
this.jp = jp;
this.sc2 = sc2;
this.sleepTime = 200;
sq = new Square((int)(Math.random()* 4)+ 1);
next = new Square((int)(Math.random()* 4)+ 1);
}
public void init(){
for(int i = 0;i
for(int j = 0;j
state[i][j] = false;
}
}
update();
}
@Override
public void run()
//重设run()方法
{
while(true){
try {
if(!isGameOver()){
if(isHit()){
set();
} else {
fall();
}
check();
update();
Thread.sleep(sleepTime);
} else {
break;
}
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
private void set()
//码放方块
{
for(int i = 0;i
for(int j = 0;j
if(sq.getState(i, j)== true){
state[i + x][y + j] = true;
}
}
}
x = 0;
y = 0;
sq = next;
next = new Square((int)(Math.random()* 4)+ 1);
sleepTime = 1000 /(speed + 2);
}
private void update()
//更新数据
{
for(int i = 0;i
for(int j = 0;j
if(state[i][j] == true){
sc[i][j].setBackground(Color.BLUE);
} else {
sc[i][j].setBackground(Color.WHITE);}
}
}
for(int i = 0;i
for(int j = 0;j
if(sq.getState(i, j)){
sc[i + x][j + y].setBackground(Color.BLUE);
}
}
}
for(int i = 0;i
for(int j = 0;j
if(next.getState(i, j)){
sc2[i][j].setBackground(Color.BLUE);
} else {
sc2[i][j].setBackground(Color.WHITE);
}
}
}
}
private boolean isHit()
//下落碰撞判断
{
for(int i = 0;i
for(int j = 0;j
if(sq.getState(i, j)&&(x + i == 19 || state[i + x + 1][j + y])){
return true;
}
}
}
return false;
}
private void fall()
//下落
{
x++;
}
private boolean isLeftHit()
//左移碰撞判断
{
if(y == 0){
return true;
}
for(int i = 0;i
for(int j = 0;j
if(sq.getState(i, j)&& state[x + i][y + j1][j];
}
}
sorce += 10;
speed = sorce / 100;
jl1.setText(String.valueOf(sorce));
jl2.setText(String.valueOf(speed));
sleepTime = 1000 /(speed + 2);
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
public void moveLeft()
//向左
{
if(!isLeftHit()){
state[x][y] = false;
y--;
}
}
private boolean isRightHit()
//右移碰撞判断
{
for(int i = 0;i
for(int j = 0;j
if(sq.getState(i, j)&&(y + j >= 9 || state[x + i][y + j + 1])){
return true;
}
}
}
return false;
}
public void moveRight()//向右
{
if(!isRightHit()){
state[x][y] = false;
y++;
}
}
public void rot()
//旋转
{
sq.rot();
}
public void down()
//加速向下
{
sleepTime = 20;}
}
package square;import javax.swing.*;import java.awt.*;public cla Main extends javax.swing.JFrame { private static final long serialVersionUID = 1L;private JPanel sc[][];
private JPanel sc2[][];
private boolean state[][];
Controller t;
/** Creates new form Square */
public Main()
{
initComponents();
sc = new JPanel[20][10];
sc2 = new JPanel[4][4];
state = new boolean[25][15];
jPanel1.setLayout(new GridLayout(20, 10, 2, 2));
jPanel3.setLayout(new GridLayout(4, 4, 2, 2));
jPanel3.setSize(150, 150);
for(int i = 0;i
for(int j = 0;j
sc[i][j] = new JPanel();
// sc[i][j].setSize(20, 20);
sc[i][j].setBackground(Color.WHITE);
jPanel1.add(sc[i][j]);
}
}
for(int i = 0;i
for(int j = 0;j
sc2[i][j] = new JPanel();
// sc2[i][j].setSize(20, 20);
sc2[i][j].setBackground(Color.WHITE);
jPanel3.add(sc2[i][j]);
}
}
jLabel3.setText(“0”);
jLabel4.setText(“0”);
this.setSize(460, 650);
}
/** This method is called from within the constructor to
* initialize the form.* WARNING: Do NOT modify this code.The content of this method is
* always regenerated by the Form Editor.*/
private void initComponents(){
jPanel2 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jButton1 = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
jMenuBar2 = new javax.swing.JMenuBar();
jMenu3 = new javax.swing.JMenu();
jMenuItem2 = new javax.swing.JMenuItem();
jMenu4 = new javax.swing.JMenu();
jPanel3 = new javax.swing.JPanel();
jButton4 = new javax.swing.JButton();
jMenuBar3 = new javax.swing.JMenuBar();
jMenu5 = new javax.swing.JMenu();
jMenuItem3 = new javax.swing.JMenuItem();
jMenu6 = new javax.swing.JMenu();
jButton5 = new javax.swing.JButton();
jMenuBar4 = new javax.swing.JMenuBar();
jMenu7 = new javax.swing.JMenu();
jMenuItem4 = new javax.swing.JMenuItem();
jMenu8 = new javax.swing.JMenu();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setMinimumSize(new java.awt.Dimension(400, 550));
jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jLabel1.setText(“Score”);
jLabel2.setText(“Speed”);
jLabel3.setText(“jLabel3”);
jLabel4.setText(“jLabel4”);
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addComponent(jLabel3))
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jLabel2)
.addGap(18, 18, 18)
.addComponent(jLabel4)))
.addContainerGap(35, Short.MAX_VALUE)));
jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jLabel3))
.addGap(18, 18, 18)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jLabel4))
.addContainerGap(84, Short.MAX_VALUE)));
jButton1.setText(“Start”);
jButton1.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jButton1ActionPerformed(evt);
}
});
jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jPanel1.setMinimumSize(new java.awt.Dimension(300, 500));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 291, Short.MAX_VALUE));
jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 504, Short.MAX_VALUE));
jButton2.setText(“L”);
jButton2.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jButton2ActionPerformed(evt);
}
});
jButton3.setText(“R”);
jButton3.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jButton3ActionPerformed(evt);
}
});
jMenu1.setText(“File”);
jMenuItem1.setText(“Start”);
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
jMenu2.setText(“Edit”);
jMenuBar1.add(jMenu2);
jMenu3.setText(“File”);
jMenuItem2.setText(“Start”);
jMenu3.add(jMenuItem2);
jMenuBar2.add(jMenu3);
jMenu4.setText(“Edit”);
jMenuBar2.add(jMenu4);
jPanel3.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jPanel3.setMinimumSize(new java.awt.Dimension(120, 120));
jPanel3.setPreferredSize(new java.awt.Dimension(120, 120));
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 135, Short.MAX_VALUE));
jPanel3Layout.setVerticalGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 116, Short.MAX_VALUE));
jButton4.setText(“Rot”);
jButton4.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jButton4ActionPerformed(evt);
}
});
jMenu5.setText(“File”);
jMenuItem3.setText(“Start”);
jMenu5.add(jMenuItem3);
jMenuBar3.add(jMenu5);
jMenu6.setText(“Edit”);
jMenuBar3.add(jMenu6);
jButton5.setText(“D”);
jButton5.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jButton5ActionPerformed(evt);
}
});
jMenu7.setText(“File”);
jMenu7.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent evt){
jMenu7ActionPerformed(evt);
}
});
jMenuItem4.setText(“Start”);
jMenu7.add(jMenuItem4);
jMenuBar4.add(jMenu7);
jMenu8.setText(“Edit”);
jMenuBar4.add(jMenu8);
setJMenuBar(jMenuBar4);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jPanel1,javax.swing.GroupLayout.PREFERRED_SIZE,295, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel2,javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jPanel3, Short.MAX_VALUE)
.addComponent(jButton4,javax.swing.GroupLayout.DEFAULT_SIZE, 139,javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton3)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, Short.MAX_VALUE)))
.addContainerGap()));
layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel2,javax.swing.GroupLayout.PREFERRED_SIZE,10,javax.swing.GroupLayout.Alignment.LEADING,javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel3,javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(44, 44, 44)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
javax.swing.GroupLayout.PREFERRED_SIZE,33,.addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton5, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(63, Short.MAX_VALUE))
.addComponent(jPanel1,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE,38, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE));
pack();
}
//
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
// TODO add your handling code here:
t = new Controller(0, 0, sc, state, 0, 0, jLabel3, jLabel4, jPanel3, sc2);
t.init();
t.start();}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
// TODO add your handling code here:
t.moveLeft();}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt){
// TODO add your handling code here:
t.moveRight();}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt){
// TODO add your handling code here:
t.rot();}
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt){
// TODO add your handling code here:
t.down();
}
private void jMenu7ActionPerformed(java.awt.event.ActionEvent evt){
// TODO add your handling code here:
t.init();}
/**
* @param args the command line arguments
*/
public static void main(String args[]){
java.awt.EventQueue.invokeLater(new Runnable(){
public void run(){
new Main().setVisible(true);
}
});
}
// Variables declaration-do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton5;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenu jMenu3;
private javax.swing.JMenu jMenu4;
private javax.swing.JMenu jMenu5;
private javax.swing.JMenu jMenu6;
private javax.swing.JMenu jMenu7;
private javax.swing.JMenu jMenu8;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuBar jMenuBar2;
private javax.swing.JMenuBar jMenuBar3;
private javax.swing.JMenuBar jMenuBar4;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenuItem jMenuItem3;
private javax.swing.JMenuItem jMenuItem4;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
// End of variables declaration
}
package square;public cla Square {
boolean[][][] state;
int condition;
//定义多种情况
public Square(int kind)
//
定义多种类型
{
state = new boolean[4][4][4];
condition = 0;
switch(kind){
case 1:
//方形
每个case之后应该有个break;否则在满足条件之后会继续向后进行会跳出
state[0][0][0] = true;
state[0][0][1] = true;
state[0][1][0] = true;
state[0][1][1] = true;
state[1][0][0] = true;
state[1][0][1] = true;
state[1][1][0] = true;
state[1][1][1] = true;
state[2][0][0] = true;
state[2][0][1] = true;
state[2][1][0] = true;
state[2][1][1] = true;
state[3][0][0] = true;
state[3][0][1] = true;
state[3][1][0] = true;
state[3][1][1] = true;
break;
case 2:
//I型
state[0][0][0] = true;
state[0][1][0] = true;
state[0][2][0] = true;
state[0][3][0] = true;
state[1][0][0] = true;
state[1][0][1] = true;
state[1][0][2] = true;
state[1][0][3] = true;
state[2][0][0] = true;
state[2][1][0] = true;
state[2][2][0] = true;
state[2][3][0] = true;
state[3][0][0] = true;
state[3][0][1] = true;
state[3][0][2] = true;
state[3][0][3] = true;
break;
case 3:
//L型
state[0][0][0] = true;
state[0][1][0] = true;
state[0][2][0] = true;
state[0][2][1] = true;
state[1][0][2] = true;
state[1][1][0] = true;
state[1][1][1] = true;
state[1][1][2] = true;
state[2][0][0] = true;
state[2][0][1] = true;
state[2][1][1] = true;
state[2][2][1] = true;
state[3][0][0] = true;
state[3][0][1] = true;
state[3][0][2] = true;
state[3][1][0] = true;
break;
case 4:
//T型
state[0][0][0] = true;
state[0][0][1] = true;
state[0][0][2] = true;
state[0][1][1] = true;
state[1][0][1] = true;
state[1][1][0] = true;
state[1][1][1] = true;
state[1][2][1] = true;
state[2][0][1] = true;
state[2][1][0] = true;
state[2][1][1] = true;
state[2][1][2] = true;
state[3][0][0] = true;
state[3][1][0] = true;
state[3][1][1] = true;
state[3][2][0] = true;
break;
}
}
public boolean getState(int i, int j)//获得是否为声明的i,j变量的值
{
return state[condition][i][j];
}
public void rot(){
condition =(condition + 1)% 4;
} }
俄罗斯方块心得体会(共18篇)由网友“小学生”投稿提供,这次小编在这里给大家整理过的俄罗斯方块心得体会,供大家阅读参考。篇1:俄罗斯方块心得体会 俄罗斯方块心得体会俄罗斯方块......
刀豆文库小编为你整合推荐4篇俄罗斯方块怎么造句,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......
俄罗斯方块怎么造句(1) 自打我从俄罗斯留学回来,俄罗斯方块玩的比以前玩的好多了。(2) 人生就像俄罗斯方块,你无法预知下一步,但是在这一步开始你就要为下一步做打算。(3) 几乎......
课后练习题五姓名性别出生年月照片毕业院校专业学历政治面貌民族身高健康状况籍贯身份证号码联系电话主修课程英语水平计算机水平社会实践奖励情况自我评价......
俄罗斯方块中的人生哲理俄罗斯方块是一款曾经风靡全球的经典消除游戏,玩法也是非常简单容易上手,俄罗斯方块中其实也蕴含着非常多的的人生哲理。以下是小编整理的俄罗斯方块中......
