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课程设计》心得体会 ......................................
摘要
在现代,高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一。俄罗斯方块(Tetris, 俄文:Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。为此,我们设计了一款简单的俄罗斯方块JAVA游戏程序,以便更好的满足广大电脑工作者闲暇之余的消遣,并且也让我们学到编程技术与团队意识。
关键字:俄罗斯方块、JAVA游戏、编程
第一章课程设计要求
题目名称:俄罗斯方块
题目类型:设计型
课程设计目的:
1)了解Java的基本使用方法。
2)熟悉eclipse的运行环境。
3)用JAVA来设计一个俄罗斯方块的小游戏。
4)基本实现俄罗斯方块的应用功能。
实验原理:
JAVA程序分析与设计、类的灵活运用、多态技术、模板技术、异常处理等。
实验内容:
本俄罗斯方块游戏是对于随机给出不同的形状(长条形、Z字形、反Z 形、田字形、L字形、反L形、T字型)下落填充给定的区域,若填满一条便消掉,记分。若在游戏中各形状填满了给定区域,为输者。
第二章设计概要
2.1 功能设计
本项目是为了实现俄罗斯方块的基本功能而设计的,基本能够达到俄罗斯方块的各种游戏性。项目需求分析如下:
1)由方块组成的不同的随机图形会从区域上方开始缓慢落下。
2)玩家可以做的操作有:
以90度为单位旋转方每一格块。
以格子为单位左右移动方块,让方块加速落下。
3)方块移到区域最下方或是着地到其他方块上无法移动时,就会固定在该处,而新的随机图形会出现在区域上方开始落下。
4)当区域中某一列横向格子全部由方块填满,则该列会自动消除并成为玩家的得分。
5)一次性销毁不同行数方块得分不同,一行1分,两行2分,三行5分,四行10分。
6)当固定的方块堆到区域最上方,则游戏结束。
2.2 功能分析 2.2.1 系统操作界面
2.2.2 程序主要功能说明
1.面板画笔类
代码:
package Tetris;
import java.awt.Color; import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyAdapter; import
java.awt.event.KeyEvent;
import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TetrisPanel extends JPanel{
//游戏主面板20行10列
private static final int ROWS = 20;
private static final int COLS = 10;
//代表方块着陆的墙
private Cell[][] wall = new Cell[ROWS][COLS];
//定义每一小块的大小
private static final int CELL_SIZE = 25;
//游戏得分
private int score;
//游戏销毁行数
private int lines;
//一次性销毁行数的计分标准(0行=0分,1行=1分,2行=4分,3行=10分,4行=20分)private static final int [] SCORE_LEVEL ={0,1,4,10,20};
//游戏结束标记
private boolean gameOver = false;
//游戏暂停标记
private boolean pause = false;
//正在下落的四格方块
private Tetromino currentTetro ;
//下一个下落的四格方块
private Tetromino nextTetro ;
//定义游戏定时器
private Timer timer;
public static void main(String[] args){
JFrame frame = new JFrame("俄罗斯方块");
int width = (COLS+8)*CELL_SIZE+100;
int height = ROWS*CELL_SIZE+100;
frame.setSize(width, height);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//取消系统默认布局
frame.setLayout(null);
TetrisPanel panel = new TetrisPanel();
panel.setLocation(45, 35);
panel.setSize((COLS+8)*CELL_SIZE,ROWS*CELL_SIZE+1);
frame.add(panel);
frame.setVisible(true);
panel.action();
}
public void paint(Graphics g){
super.paint(g);
//填充背景颜色
this.paintBackground(g);
//绘制游戏墙
paintWall(g);
//绘制分数墙
paintScore(g);
//绘制面板边框
paintTetrisBorder(g);
//绘制当前四格方块
paintCurrentTetro(g);
//绘制下个四格方块
paintNextTetro(g);
}
//
private static final int BG_COLOR = 0xC3D5EA;
//
private static final int BORDER_COLOR = 0x667799;
//
private static final int FONT_COLOR = 0x000000;
//绘制背景的方法
public void paintBackground(Graphics g){
g.setColor(new Color(BG_COLOR));
//this.setBackground(new Color(BG_COLOR));
g.fillRect(0, 0, this.getWidth(), this.getHeight()); }
//绘制游戏墙的方法
public void paintWall(Graphics g){
for(int row=0;row for(int col=0;col Cell cell = wall[row][col]; int x =col*CELL_SIZE; int y= row*CELL_SIZE; if(cell==null){ g.setColor(new Color(BORDER_COLOR)); g.drawRect(x, y, CELL_SIZE, CELL_SIZE); }else{ g.setColor(new Color(cell.getColor())); g.fillRect(x, y, CELL_SIZE, CELL_SIZE); g.setColor(new Color(BORDER_COLOR)); g.drawRect(x, y, CELL_SIZE, CELL_SIZE); } } } } //绘制分数墙的方法 public void paintScore(Graphics g){ int x = 12*CELL_SIZE; int y = 6*CELL_SIZE; Font font = new Font("楷体",Font.BOLD,23); String msg ="分数:"+score; g.setColor(new Color(FONT_COLOR)); g.setFont(font); g.drawString(msg, x, y); y+=2*CELL_SIZE; msg = "行数:"+lines; g.drawString(msg, x, y); if(gameOver){ msg = "(T_T)【S】再来"; y+=2*CELL_SIZE; x-=CELL_SIZE; g.drawString(msg, x, y); }else if(pause){ msg = "【C】继续"; y+=2*CELL_SIZE; g.drawString(msg, x, y); }else{ msg = "【P】暂停"; y+=2*CELL_SIZE; g.drawString(msg, x, y); } } //绘制面板边框的方法 public void paintTetrisBorder(Graphics g){ g.setColor(new Color(BORDER_COLOR)); g.drawRect(0, 0, CELL_SIZE*(COLS+8)-1, CELL_SIZE*ROWS); } //绘制当前四格方块的方法 public void paintCurrentTetro( Graphics g){ if(currentTetro==null){ //如果没有四格方块,则返回不绘画 return; } for(Cell cell:currentTetro.cells){ int row = cell.getRow(); int col = cell.getCol(); int x = col*CELL_SIZE; int y = row*CELL_SIZE; g.setColor(new Color(cell.getColor())); g.fillRect(x, y, CELL_SIZE, CELL_SIZE); g.setColor(new Color(BORDER_COLOR)); g.drawRect(x, y, CELL_SIZE, CELL_SIZE); } } //绘制下个四格方块的方法 public void paintNextTetro( Graphics g){ if(nextTetro==null){ //如果没有四格方块,则返回不绘画 return; } for(Cell cell:nextTetro.cells){ int row = cell.getRow(); int col = cell.getCol(); int x = (col+9)*CELL_SIZE; int y = (row+1)*CELL_SIZE; g.setColor(new Color(cell.getColor())); g.fillRect(x, y, CELL_SIZE, CELL_SIZE); g.setColor(new Color(BORDER_COLOR)); g.drawRect(x, y, CELL_SIZE, CELL_SIZE); } } //让四格方块动起来的方法 public void action(){ startGameAction(); //请求此容器获取输入焦点 this.requestFocus(); this.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ int key= e.getKeyCode(); if(gameOver){ if(key==KeyEvent.VK_S){ startGameAction(); } return; } if(pause){ if(key==KeyEvent.VK_C){ continueAction(); } return; } switch(key){ case KeyEvent.VK_DOWN: softDownAction(); break; case KeyEvent.VK_LEFT: moveLeftAction(); break; case KeyEvent.VK_RIGHT: moveRightAction(); break; case KeyEvent.VK_UP: rotateRightAction(); break; case KeyEvent.VK_SPACE: hardDownAction(); break; case KeyEvent.VK_P: pauseAction(); break; } repaint(); } //暂停游戏的方法 private void pauseAction() { pause = true; timer.cancel(); } //继续游戏的方法 private void continueAction() { pause = false; timer = new Timer(); timer.schedule(new TimerTask() { public void run() { softDownAction(); repaint(); } }, 500, 500); } }); } //在游戏开始时调用或者【S】按下时调用public void startGameAction(){ gameOver = false; pause = false; score = 0; lines = 0; //清空游戏主面板 emptyWall(); //生成下一个四格方块 nextTetromino(); //生成定时器对象 timer = new Timer(); //启动定时器工作 timer.schedule(new TimerTask() { public void run() { //调用面板的四格方块下落方法(自由下落)softDownAction(); //重画面板 repaint(); } }, 500, 500); } //清空游戏主面板方法 public void emptyWall(){ for(int row =0;row //wall[row]这一行全部用null表示 Arrays.fill(wall[row], null); } } //生成(随机)下一个四格方块,1.下一个变成当前的。2.随机生成下一个。public void nextTetromino(){ if(nextTetro==null){ //第一次nextTetro是null时就随机生成一个 nextTetro = Tetromino.randomTetromino(); } //下一个四格方块立即变成当前四格方块 currentTetro = nextTetro; nextTetro = Tetromino.randomTetromino(); } //四格方块下落流程,方块移动到区域最下方或者移动到其他方块上则固定在此处。//而新的四个方块则会出现在区域上方并开始下落且随机生成下一个四格方块 public void softDownAction(){ if(canDown()){ //如果能下落则继续下落 currentTetro.softDown(); }else{ //不能下落则着陆到墙上 tetrominoLandToWall(); //每一个四格方块着陆清除满行且计分 destroy(); //每一个四格方块着陆需要检测游戏是否结束 if(gameOver()){ //如果游戏结束 gameOverAction(); }else{ //随机生成下一个四格方块 nextTetromino(); } } } //检查方块是否能够继续下落(落到最底部或者墙上的下方有方块) private boolean canDown() { //检查是否到底部 Cell [] cells = currentTetro.cells; for(Cell cell:cells){ if(cell.getRow()==ROWS-1){ return false; } } //检查次四格方块下方是否有方块 for(Cell cell:cells){ int row = cell.getRow(); int col = cell.getCol(); Cell block = wall[row+1][col]; if(block!=null){ return false; } } return true; } //方块“着陆”到墙上,取出每个小方块找到对应的行号row和列号col,将cell小方块放到对应的wall[row][col]位置上 private void tetrominoLandToWall() { Cell [] cells = currentTetro.cells; for(Cell cell:cells){ int row = cell.getRow(); int col = cell.getCol(); //将cell小方块放到对应的wall[row][col]位置上 wall[row][col]=cell; } } //销毁满行的方法 private void destroy() { //统计本次销毁的行数 int lines =0; for(int row =0 ;row //判断此行是否是满行 if(fullCells(row)){ //清除此行 clearLine(row); //每清除一行就累计加一 lines++; } } //整个游戏面板每一行判断之后要记录销毁行数与计分 score += SCORE_LEVEL[lines]; this.lines += lines; } //判断某一行是否填满cell小方块 private boolean fullCells(int row) { Cell[]line = wall[row]; for(int i=0; i if(line[i]==null){ //只要慈航有一个位置没有cell,就不是满行 return false; } } return true; } //清除此行的方法,方法:(依次将此行的上一行复制到下一行,第一行全部用null填充)private void clearLine(int row) { //循环将游戏面板中的每一行复制到下一行 for(int i=row; i>=1;i--){ //wall[row] = Arrays.copyOf(wall[row-1], COLS); System.arraycopy(wall[row-1], 0, wall[row], 0, COLS); } //第一行全部用null填充 Arrays.fill(wall[0], null); } //检查游戏是否结束(思路:游戏主面板中第一行出现四个方块的区域有小方块cell在则游戏结束) private boolean gameOver() { gameOver = wall[0][3]!=null||wall[0][4]!=null; return gameOver; } //清零游戏结束现场(停止计时器) private void gameOverAction() { //停止计时器 timer.cancel(); } //以四格方块为单位左右移动的方法:1.遇到左右边界不能移动。2.遇到左右有方块不能移动。 //左移的方法 private void moveLeftAction() { currentTetro.moveLeft(); if(outOfBounds()||coincide()){ currentTetro.moveRight(); } } //判断四格方块是否与墙上的方块重合的方法 private boolean coincide() { for(Cell cell:currentTetro.cells){ int col = cell.getCol(); int row = cell.getRow(); //System.out.println(col+":"+row); if(wall[row][col]!= null){ return true; } } return false; } //判断四格方块是否出边界的方法 private boolean outOfBounds() { for(Cell cell:currentTetro.cells){ int col = cell.getCol(); if(col<0||col>=COLS){ return true; } } return false; } //右移的方法 private void moveRightAction() { currentTetro.moveRight(); if(outOfBounds()||coincide()){ currentTetro.moveLeft(); } } //四格方块加速下落的方法 private void hardDownAction() { //四格方块继续下落 while(canDown()){ currentTetro.softDown(); } //着陆到墙上 tetrominoLandToWall(); //清除满行并计分 destroy(); if(gameOver()){ gameOverAction(); }else{ nextTetromino(); } } //旋转流程控制 private void rotateRightAction() { currentTetro.rotateRight(); if(outOfBounds()||coincide()){ currentTetro.rotateLeft(); } } } 2.2.2方块类 代码: package Tetris; //代表游戏中每一个小格子方块 public class Cell { //小方块在游戏面板中的哪一行 private int row; //小方块在游戏面板中的哪一列 private int col; //小方块的颜色 private int color; public Cell(int row, int col, int color){ this.row = row; this.col = col; this.color = color; } public int getRow() { return row; } public void setRow(int row) { this.row = row; } public int getCol() { return col; } public void setCol(int col) { this.col = col; } public int getColor() { return color; } public void setColor(int color) { this.color = color; } //小方块向下移动 public void down() { row++; } //小方块向左移动 public void left() { col--; } //小方块向右移动 public void right() { col++; } } 2.2.3七种方块旋转属性定义类 代码: package Tetris; import java.util.Random; //四个方块类,有7种子类:I T S Z J L O public abstract class Tetromino { //每一种四个方块都有自己的颜色 public static final int I_COLOR =0xff9988; public static final int T_COLOR =0x44ff88; public static final int S_COLOR =0x704077; public static final int Z_COLOR =0xccee00; public static final int J_COLOR =0xff1144; public static final int L_COLOR =0x1122ff; public static final int O_COLOR =0x6642bb; //四个方块有四个小方块(Cell)组成protected Cell[]cells = new Cell[4]; //每一种四格方块都有旋转状态(旋转方式)protected Offset[] states; //定义成员内部类 protected class Offset{ int row0,col0; int row1,col1; int row2,col2; int row3,col3; public Offset(int row0,int col0, int row1,int col1, int row2,int col2, int row3,int col3){ this.row0 = row0; this.col0 = col0; this.row1 = row1; this.col1 = col1; this.row2 = row2; this.col2 = col2; this.row3 = row3; this.col3 = col3; } } //随机生成一个具体的四格方块 public static Tetromino randomTetromino(){ Random random = new Random(); // int type = random.nextInt(7); switch(type){ case 0: return new I(); case 1: return new T(); case 2: return new J(); case 3: return new O(); case 4: return new S(); case 5: return new L(); case 6: return new Z(); } return null; } //四格方块的下落,是四个小方块一起下落 public void softDown() { for(int i=0;i cells[i].down(); } } public void moveLeft() { for(int i=0;i cells[i].left(); } } public void moveRight() { for(int i=0;i cells[i].right(); } } //四格方块旋转标记 private int index = 9999; //向右旋转 public void rotateRight() { index++; Offset offset = states[index%states.length]; Cell axis = cells[0]; cells[1].setRow(axis.getRow()+offset.row1); cells[1].setCol(axis.getCol()+offset.col1); cells[2].setRow(axis.getRow()+offset.row2); cells[2].setCol(axis.getCol()+offset.col2); cells[3].setRow(axis.getRow()+offset.row3); cells[3].setCol(axis.getCol()+offset.col3); } //向左旋转 public void rotateLeft() { index--; Offset offset = states[index%states.length]; Cell axis = cells[0]; cells[1].setRow(axis.getRow()+offset.row1); cells[1].setCol(axis.getCol()+offset.col1); cells[2].setRow(axis.getRow()+offset.row2); cells[2].setCol(axis.getCol()+offset.col2); cells[3].setRow(axis.getRow()+offset.row3); cells[3].setCol(axis.getCol()+offset.col3); } } //I形的四格方块 class I extends Tetromino{ public I(){ //I形的四格方块在游戏面板中的初始位置与颜色cells[0] = new Cell(0,4,I_COLOR); cells[1] = new Cell(0,3,I_COLOR); cells[2] = new Cell(0,5,I_COLOR); cells[3] = new Cell(0,6,I_COLOR); //I形四格方块的旋转状态 states = new Offset[]{ new Offset(0,0,-1,0,1,0,2,0), new Offset(0,0,0,-1,0,1,0,2) }; } } //T形的四格方块 class T extends Tetromino{ public T(){ //T形的四格方块在游戏面板中的初始位置与颜色cells[0] = new Cell(0,4,T_COLOR); cells[1] = new Cell(0,3,T_COLOR); cells[2] = new Cell(0,5,T_COLOR); cells[3] = new Cell(1,4,T_COLOR); //T形四格方块的旋转状态 states = new Offset[]{ new Offset(0,0,1,0,-1,0,0,-1), new Offset(0,0,0,1,0,-1,-1,0), new Offset(0,0,-1,0,1,0,0,1), new Offset(0,0,0,-1,0,1,1,0) }; } } //S形的四格方块 class S extends Tetromino{ public S(){ //S形的四格方块在游戏面板中的初始位置与颜色cells[0] = new Cell(0,4,S_COLOR); cells[1] = new Cell(1,3,S_COLOR); cells[2] = new Cell(0,5,S_COLOR); cells[3] = new Cell(1,4,S_COLOR); //S形四格方块的旋转状态 states = new Offset[]{ new Offset(0,0,1,0,-1,-1,0,-1), new Offset(0,0,0,1,1,-1,1,0) }; } } //J形的四格方块 class J extends Tetromino{ public J(){ //J形的四格方块在游戏面板中的初始位置与颜色cells[0] = new Cell(0,4,J_COLOR); cells[1] = new Cell(0,3,J_COLOR); cells[2] = new Cell(0,5,J_COLOR); cells[3] = new Cell(1,5,J_COLOR); //J形四格方块的旋转状态 states = new Offset[]{ new Offset(0,0,-1,0,1,0,1,-1), new Offset(0,0,0,1,0,-1,-1,-1), new Offset(0,0,-1,0,1,0,-1,1), new Offset(0,0,0,-1,0,1,1,1) }; } } //L形的四格方块 class L extends Tetromino{ public L(){ //L形的四格方块在游戏面板中的初始位置与颜色cells[0] = new Cell(0,4,L_COLOR); cells[1] = new Cell(0,3,L_COLOR); cells[2] = new Cell(0,5,L_COLOR); cells[3] = new Cell(1,3,L_COLOR); //L形四格方块的旋转状态 states = new Offset[]{ new Offset(0,0,-1,0,1,0,-1,-1), new Offset(0,0,0,1,0,-1,-1,1), new Offset(0,0,1,0,-1,0,1,1), new Offset(0,0,0,-1,0,1,1,-1) }; } } //Z形的四格方块 class Z extends Tetromino{ public Z(){ //Z形的四格方块在游戏面板中的初始位置与颜色cells[0] = new Cell(0,4,Z_COLOR); cells[1] = new Cell(0,3,Z_COLOR); cells[2] = new Cell(1,4,Z_COLOR); cells[3] = new Cell(1,5,Z_COLOR); //Z形四格方块的旋转状态 states = new Offset[]{ new Offset(0,0,-1,0,0,-1,1,-1), new Offset(0,0,0,-1,1,0,1,1) }; } } //O形的四格方块 class O extends Tetromino{ public O(){ //O形的四格方块在游戏面板中的初始位置与颜色cells[0] = new Cell(0,4,O_COLOR); cells[1] = new Cell(0,5,O_COLOR); cells[2] = new Cell(1,4,O_COLOR); cells[3] = new Cell(1,5,O_COLOR); //O形四格方块的旋转状态 states = new Offset[]{ new Offset(0,0,0,1,1,0,1,1) }; } } 程序设计实践 设 计 报 告 课题名称:俄罗斯方块(MFC版)学生姓名:黄嘉慧 班级:2012211113 班内序号:27 学号:2012210389 日期:2014.6.1 1. 实验概述 1.1 课题目标和主要内容。 本课题的主要内容是用MFC 实现经典游戏俄罗斯方块的编写。目标是能够正常运行,并且无过于严重的问题。使用的平台为MFC (基于对话框)。 1.2 采用计分升级制来进行游戏。当一次消去一行时,得一分,一次两行得 4分,一次3行,得9分,一次4行,得16 分。每 50分为一个等 级,得分足够则升级并重新开始游戏。 2. 程序设计 2.1 系统总体框架 用一个4维数组DiamondStruct[7][4][4][4]来表示所有的方块,用一个POINT 类型的DiamondPos 来表示方块当前的位置,然后通过一个二维数组BlockPanel[][],来表示整个游戏界面,同时进行障碍的添加。游戏过程中,通过改变DiamondPos 来进行方块的下降以及 左右移动,通过DiamondStruct[7][4][4][4]中第二个参数的改变来进行方块的变换。 2.2系统详细设计 【1】模块划分图及描述 【2】类关系图及描述 CWinApp 与CDialog 为基类。其它为添加的类。 【3】程序流程图及描述 【4】存储结构,内存分配 主要存储结构为数组。同时分配内存的有,画笔,Diamond类的指针,Panel类的指针,Block类的指针,Mill类的指针,Manager类的指 针。 2.3 关键算法分析 【1】 bool Diamond::FullLine() { bool IsFull,Full=false; pManager->SeriesLine=0; for(int iy=0;iy<=pPanel->nVGridNum;iy++) { IsFull=true; for(int ix=0;ix<=pPanel->nHGridNum;ix++) { if(!pBlock->BlockPanel[ix][iy]) IsFull=false; } if(IsFull) { Full=true; pManager->SeriesLine++; for(int jy=iy;jy>0;jy--) { Sleep(10); for(int jx=0;jx<=pPanel->nHGridNum;jx++) { pBlock->BlockPanel[jx][jy]=pBlock->BlockPanel[jx][jy-1]; } } } } pManager->LineNumber+=pManager->SeriesLine; pManager->Result+=pManager->SeriesLine*pManager->SeriesLine; if(Full) return true; else return false; } 该算法实现的功能为,判断是否已经满行,并且若是满行,进行消行,加分的操作。该算法的时间复杂度为O(n)=【(nVGridNum)^2*nHGridNum.】/2 JAVA课程设计报告 组员信息: 第(二)组 计算器的实现问题 问题描述:制作一个计算器 基本要求:要求实现类似Windows操作系统里面的标准计算器。 在此基础上实现部分科学性的功能。 测试数据:分别对加、减、乘、除和sin、cos、tan函数进行测试 算法思想:使用String定义的数组a[25]对每个按钮进行按钮赋值,创建一个Panel进行字符和数字的存放,调用 addActionListener()对各个时间进行监听。调用 系统库函数对数值进行运算。 模块划分:1、主函数main()创建一个计算器。 2、void actionPerformed(ActionEvent e)对鼠标 点击的事件进行响应以及在文本框中的显示。 3、各Buuton对应的功能: “开方”:对输入数字开方 “平方”:对输入数字平方 “getResult()”:对四则运算进行分别运算操 作 “backspace”:取消上一次的操作 “CE”:取消上一次运算的操作 “C”:清空作用 “sin”:对输入数据进行sin运算 “cos”:对输入数据进行cos运算 “tan”:对输入数据进行tan运算 “+/-”:对输入的数据取反 “+”,“-”,“*”,“/”:对数据进行四则 运算 源程序: package hechongwei; import https://www.360docs.net/doc/163652092.html,ng.String; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; import https://www.360docs.net/doc/163652092.html,ng.Math; class Calculator extends JFrame implements ActionListener 《软件工程与开发实践1》 软件设计报告 题目俄罗斯方块 学院计算机学院 专业计算机科学与技术 班级 学号 10109345 学生姓名 其他成员 组长 指导教师孙志海 完成日期2012年6月 一、软件设计概述(目的、任务、开发环境、参考资料) 俄罗斯方块游戏属于经典小游戏,游戏规则简单,但又不乏趣味。而计算的一大领域也是游戏,所以,成为游戏开发者,几乎是每个编程者的梦想。经过大一和大二的学习,我们已经掌握了编程基础。为了提高我们的编程能力,我们就要不断积累编程经验。 1、目的:复习和巩固C/C++编程的基本思想;掌握数据结构的核心思想;掌握C/C++中多文件的编写;初步对了解界面的设计。 2、任务:完成一个可以运行的游戏。 3、开发环境:C/C++控制台。 4、参考资料: [1] 谭浩强.C语言程序设计[M].北京:清华大学出版社.2004.6 [2] 孙鑫\余安萍.VC++深入详解[M].北京:电子工业出版社.2006.6 二、可行性研究、需求分析及分工 这是一个游戏软件,程序与用户的交流只在游戏界面上,方块的产生是随机的。 三、软件设计的基本原理和采用的主要方法与技术 1、方块类型以下7大类 ██████████ ██████ ███ █████████ 每一种方块都能够变形,所以在游戏中如何正确打印出方块的类型是重点,也是难点。我采用的是“相对坐标法”,具体实现参照“实现的过程与步骤”部分。 2、此游戏是简单的二维游戏,而且区域恒定不变,所以在存储游戏的信息时,二维数组是首选。用数组元素值模拟当前位置有无方块。 3、流程图如下 4、采用的方法 在控制台下,光标是左到右,自上而下的,所以要要调用系统函数来控制光标。同理,为了界面的美观,也要调用系统函数进行颜色控制。 5界面设置 游戏的最大特点就是界面的美观,由此才能吸引玩家的兴趣,因此如何让界面尽最大限度美观,是每个游戏程序员努力的目标。这个程序是在VC环境下基于C/C++控制台的,由于VC下没有像TC下那样丰富的图形库,画图就要调用windows API函数。但由于我对windowsAPI理解不深,所以画起图来还是比较困难。 游戏不仅要求界面美观,而且还要音乐来衬托,所以在整个程序中,尽量让方块的每一个动作与特殊的音乐像对应,此外,最好加上背景音乐。 四、实现的过程与步骤 数据结构: 1、方块的存储 如下图所示,每一种方块都由四个小方块组成,可以按顺序编号①、②、③、④,在方块旋转、输出、擦出时,可以由第一个方块位置加上(减去)第二个与第一个的偏移量,从而找到第二个方块,如此可以方便遍历四个方块。 由于方块属于宽字符,故在占两个字节,输出的时候占两位。设①号块的坐标为(x,y),那么第二块与它的偏移量的△x=2,△y=0,相对坐标即为(2,0)。 同理,③号方块的相对坐标为(2,1),④号方块的坐标为(4,1),特别的,①号方块的相对坐标为(0,0),这样一来,只要知道每一种(7大类,19种)方块的①号方块的坐标,就可以通过②、③、④方块与①号方块的偏移量而逐个输出整个方块。 明白了方块的输出,就要用一个数据结构存储方块了。19种方块都由4个 JAVA课程设计题目:文件的加密与解密 姓名: 学号: 班级: 日期: 目录 一、设计思路 (3) 二、具体实现 (3) 三、运行调试与分析讨论 (8) 四、设计体会与小结 (11) 五、参考文献 (12) 六、附录 (12) 一、设计思路 自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。目前,Java已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。使用Java的安全机制设计和实现安全系统更具有重要的应用价值。 本课程设计,主要实践Java安全中的JCE模块,包括密钥生成,Cipher对象初始化、加密模式、填充模式、底层算法参数传递,也涉及文件读写与对象输入输出流。 二、具体实现 本系统通过用户界面接收三个参数:明文文件、密文文件、口令。采用DES加密算法,密码分组链(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分组填充算法。因为CBC涉及到底层算法参数的解密密钥的传递,所以将明文文件中的字节块以密封对象(Sealed Object)的方式加密后,用对象流输出到密文文件,这样就将密文、算法参数、解密密钥三都密封到一个对象中了。口令的hash值作为产生密钥的参数。设计流程图如下所示: 文件加密与解密设计流程图 本系统中,包含Default,Shares,SecretKey,EncAndDec四个包共6个类组成。定义的几个参数:MAX_BUF_SIZE为每次从文件中读取的字节数,也是内存缓冲区的大小;加密算法为DES;加密模式是密码分组链(CBC)模式;分组填充方式是PKCS#5Padding。包和类结构图如下所示: 本课程设计,包和类结构图: 以下为包中的类的方法实现说明 Package Shares类结构图 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课程设计》心得体会 ...................................... Java课程设计实验报告 导语:日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。以下是小编为大家整理分享的Java课程设计实验报告,欢迎阅读参考。 1、加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。 2、使用本学期学习的Java SE技术完成多功能日历GUI 程序的设计,使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。 3、在完成基本功能的基础上发挥自己的想象力与创造力,使程序凸显出与众不同的特点与功能,形成本小组的特性色。 1、问题描述准确、规范。 2、程序结构合理,调试数据准确、有代表性、。 3、界面布局整齐,人机交互方便。 4、输出结果正确。 5、正确撰写实验报告。 编写一个GUI程序实现日历的功能。一年日历用12页 显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农 历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报 时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。 1、在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性强的题目多功能日历。 2、在第一次上机实验时讨论分工,分工明确之后,分头合作进行。 3、各成员完成自己的任务后,最后进行统筹合并,以及程序最后的优化。 4、根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的经验。 5、详细的上机实验步骤见任务分工及程序设计进度表。 经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实现实验的基本要求——一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能 课程设计报告 题目:基于C++俄罗斯方块 学院: 专业: 学号: 姓名: 二○一三年十二月 经典小游戏设计-俄罗斯方块 一、; 二、需求分析。 、游戏需求 随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,若在游戏中各形状填满了给定区域,为输者,弹出相应提示。 、游戏界面需求 良好的用户界面,有关信息显示(如操作方法、等级等)。让方块在一定的区域内运动和变形,该区域用一种颜色表明,即用一种颜色作为背景,本游戏的背景设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。而不同的方块用不同的着色表示,使游戏界面更加清晰、有条理。消层时采用一定的时间延迟,增加视觉消行的感官效果。 、游戏方块需求 良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、L字形、反L形、T字型)以及另外本程序另外加入的点形方块,各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针。为体现游戏的趣味性和扩展性,本游戏象征性的增加了点形方块,其他更多形状的方块可用类似方法增加。 、游戏控制的需求 《 游戏控分为多个方面,包括画面绘制,控制命令的获取,控制命令的分配、控制命令的处理,方块的绘制,方块的移动,方块的旋转,方块下落和消层以及计分等。对各个命令的合理处理和综合控制十分重要,一旦出错可能导致整个程序的崩溃,因此需要小心设计。 三、系统设计。 、程序流程图: 、游戏设计概述 从整体上而言,在该游戏可设计一个方块类,其中包括对方块的信息描述(如:ID)、方块的操作(如:旋转、下沉)。再设计一个控制类,实现各种控制(如:获取控制信号,分发控制信号)。另定义一个游戏区类,用以处理游戏区绘制等内容。框图如下: 》 while((c&0xF)==0) { ; c>>=4; } ir[]; intx,y; { for(inti=0;i<16;i++,b<<=1) if(b&0x8000) { x=+i%4; y=4; if(y ——————数字电路与逻辑设计实验报告—————基于VHDL的简易俄罗斯方块 实验名称简易俄罗斯方块 姓名 班级电信工程学院04107班 学号 辅导老师高英 日期2006年11月6日 俄罗斯方块游戏是我们熟知的经典小游戏之一,本实验通过硬件编成实现了简易的俄罗斯方块游戏机。VHDL是一种标准的,规范的硬件描述语言,在电子设计领域有着广泛的应用。它具有很强的电路描述和建模能力,能从多个层次多电路进行描述和建模,从而大大简化了硬件设计任务,提高了设计效率和可靠性。 本实验基于VHDL语言,利用电路中心开发的实验板,用一个4×4点阵做为基本显示屏,一个发光点表示一个图形,完成俄罗斯方块游戏的基本功能:下落、左右移动、消行和显示得分情况,当某一列到顶时游戏结束。 关键字俄罗斯方块游戏VHDL 点阵 ◆设计任务 利用电路中心开发的实验板,用点阵做为显示屏,一个发光点表示一个方块,完成下落、左右移动、消行和显示得分情况,当某一列到顶时游戏结束,数码管显示的分数保持不变。 ◆设计思路 由于实验中只用到了16个点来完成显示功能,所以选用一个16位的向量STATUS(0 TO 15)来存储各点状态,再用两个整型数分别控制当前点的坐标,但是这样控制会涉及到乘法运算,因此改为4个4位向量STAN(0 TO 3),每个向量代表一行点阵,这样做不仅使控制简单,而且在扫描显示的时候很方便,代码也很简洁。 设计包括2个大的元件,一个是RUSSIA,其功能是存储状态,分频,完成左右下移动以及计分等功能;另一个是RUSSIA_SCAN,主要完成点阵扫描和数码管译码。具体设计是这样的:4个向量STA0,STA1,STA2,STA3记录游戏状态,点的坐标由COL 和ROW来控制。设置两个指针FLAG和ROW4,如果四列中有一列都为1,表示游戏结束了,置FLAG为1,程序进入NULL;当最后一行及STA3=”1111”时,置ROW4=1,当ROW4=1时,表示要消行,加分,并且将上一行的值赋到下一行。游戏继续,如按下左键或右键,程序更根据下一状态决定是否左移或右移。(BTN1为复位RESET,BTN2为左,BTN3为右)若无键按下,则根据情况当前点是否需要自动下移。 课程设计 一、实验目的 1.加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。 2. 使用本学期学习的Java SE技术(也可以使用课堂教学中没有学习过的Java技术,但是应当以Java SE技术为主)完成多功能日历GUI程序的设计,使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。 3.在完成基本功能的基础上发挥自己的想象力与创造力,使程序凸显出与众不同的特点与功能,形成本小组的特性色。 二、实验要求 1.问题描述准确、规范。 2.程序结构合理,调试数据准确、有代表性.。 3.界面布局整齐,人机交互方便。 4.输出结果正确。 5.正确撰写实验报告。 三、实验内容 编写一个GUI程序实现日历的功能。一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报 时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。 四、实验步骤 1.在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性强的题目多功能日历。 2.在第一次上机实验时讨论分工,分工明确之后,分头合作进行。 3.各成员完成自己的任务后,最后进行统筹合并,以及程序最后的优化。 4. 根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的经验。 5.详细的上机实验步骤见任务分工及程序设计进度表。 五、实验结果 经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实现实验的基本要求——一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能齐全、符合操作习惯。 下面是程序运行效果截图: 日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够显示当前日期,并能够选择背景图片): 湖北大学 本科课程设计 题目 ATM 自助机模拟程序姓名 学号 专业年级 指导教师 职称 目录 第一章系统描述 (2) 1 前言 (2) 2 系统功能需求 (2) 第二章系统分析与设计 (3) 1 功能模块划分 (3) 2 功能模块的描述 (3) 3 系统设计流程图 (4) 4 测试数据及期望结果 (6) 第三章系统详细设计 (7) 1 主界面开发设计 (7) 2 功能选择界面开发设计 (7) 3 取款界面开发设计 (7) 4 存款界面开发设计 (8) 5 转账界面开发设计 (8) 6 查询界面开发设计 (9) 7 修改密码界面开发设计 (9) 8 界面开发设计使用函数 (9) 第四章系统测试 (11) 第五章源程序部分清单 (21) 第六章实验心得 (30) 参考文献 (31) 第一章系统描述 1 前言 Java技术是一门简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言,它也是一个平台,它基于Java虚拟机技术,借助这个东西建立了跨平台的优势。Java编程语言与众不同之处在于:Java程序既是编译型的,又是解释型的。 Java平台是一种纯软件平台,它有三个版本Java SE、Java EE、Java ME。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 本课程设计采用Eclipse作为开发工具,并采用Window Builder下的SWT Designer来实现相应的功能。着重通过模拟实现当前非常快捷又使用的ATM机来加深对java开发设计的了解,从而进一步提高自己对java图像界面的设计及相关知识的认识。 2 系统功能需求 当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM 柜员机系统,用户可以按照以下规则进行: (1)查询余额:初始余额为10000元。 (2)ATM取款:每次取款金额为100的倍数,一次取款不能超过1000,总额不 超过5000元,支取金额不允许透支,有快捷取款和用户自定义取款。 (3)ATM存款:每次存款金额为100的倍数,一次存款不能超过1000,不能出 现负存款。 (4)ATM转账:只有在两次输入账号相同且输入转账金额正确的情况下才允许 转账,不允许透支。 (5)修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只 有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。 C语言课程设计 报告 设计题目:俄罗斯方块游戏设计 院系: 班级: 学号: 姓名: 指导教师: 设计地点: 开课时间: 学生姓名成绩 评语: 指导教师(签名) 年月日 目录 1.设计目的和任务....................................................................................................................................... - 1 - 1.1目的: .............................................................................................................................................. - 1 - 1.2任务: .............................................................................................................................................. - 1 - 2.开发环境.................................................................................................................................................... - 1 - 2.1硬件环境:.................................................................................................................................... - 1 - 2.2软件环境:.................................................................................................................................... - 1 - 3.设计题目...................................................................................................................................................... - 2 - 3.1题目名称:.................................................................................................................................... - 2 - 3.2题目详细描述: ........................................................................................................................... - 2 - 3.3功能要求: ............................................................................................................................................ - 2 - 4.相关技术以及知识点.......................................................................................................................... - 3 - 4.1编写BLOCK类:............................................................................................................................... - 3 - 4.2 PATHGRADIENTBRUSH 类: ........................................................................................................ - 3 - 4.3 RANDOM类:.................................................................................................................................. - 3 - 4.4 GDI图形处理: ........................................................................................................................... - 3 - 5. 设计与实现 .............................................................................................................................................. - 4 - 5.1 设计流程图................................................................................................................................... - 4 - 5.2 游戏主体界面 .............................................................................................................................. - 4 - 5.3 游戏图形界面 ............................................................................................................................ - 11 - 5.4 图形的移动与消行 ................................................................................................................... - 13 - 5.5 得分的实现................................................................................................................................. - 15 -6.总结 ........................................................................................................................................................ - 16 -7.参考资料................................................................................................................................................ - 16 - 湖南科技大学计算机科学与工程学院 WEB编程课程设计报告 题目:网上购物商店 学号:1111111111 姓名: 1 指导老师: 1 完成时间:111111111 目录 一、设计内容 (3) 二、设计方法 (4) 1、网站的整体结构设计 (4) 2、网站设计的技术方案 (5) 3、网站的界面设计 (6) 三、实现方法 (8) 1、数据库的设计 (8) 2、网站具体的实现过程 (10) 开发环境: (10) 设计思路 (10) 四、心得体会 (11) 随着互联网时代的迅猛发展,人们的生活方式已经发生了翻天覆地的变化,传统的实体店购物方式已经不能满足人们的需求,传统购物方式购物不方便,非得出门才能购物,去到了实体店有不一定有自己满意的商品,有时候会浪费大量的时间和精力。 随着网络的全面覆盖,网上支付系统的逐步完善,物流业的快速兴起,网上购物已经成为了当今购物的潮流。 网上购物商店主要满足人们足不出户就能买到自己想要的物品的需要,同时也为商家省去了昂贵的门面租赁费用,而且商品还可以卖到全国各地,大大的扩大了客源又节省了成本。 网上购物商店主要有以下几个方面的功能: 顾客可以浏览整个网站的商品,可以再网站进行注册,注册之后可以登录并购买商品,同时也可以查看和修改自己的个人信息,为了安全的需求,还可以修改密码。 商家,也就是店主,管理员,可以管理网站所出售的所有商品,同时也可以对在网站进行注册的用户进行管理。 1、用户登录、注册功能 (1)注册功能:用户进入网站,如果有兴趣在该商店购买商品,那么用户就可以注册。 (2)登录功能。已经注册的用户可以登录,登录之后方可购买商品。 (3)查看、修改用户信息功能。 (4)修改密码,为了用户安全的需要,经常更换密码可以保证用户账户的安全。 2、购物功能 (1)物品浏览:顾客进入网站,就可以浏览网站的商品。 (2)商品购买:顾客注册自己的账户,并登录之后就可以在网站购买商品了。购买商品的步骤如下; a)添加商品到购物车 b)确定购买 3、商品管理:管理网站所出售的商品。 4、用户管理:管理员对在网站注册的用户进行管理。 5、订单管理:对用户的订单进行管理。 《JA V A程序设计》 课程设计报告 设计题目:学生信息管理系统学院名称:信息工程学院 专业班级:13计本1 姓名: 学号: 目录 一需求分析。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 二概要设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 三详细设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 3.1 数据库设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 3.2 模块及窗体设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 3.2.1 数据库模块设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 3.2.2 用户登录识别模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。5 3.2.3用户信息管理模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6 (1)密码修改。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。6 (2)用户信息添加和删除。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。8 3.2.4 学生息管理模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。10 (1)添加信息。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。10 (2)信息查看。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。11 (3)信息修改。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。12 (4)删除信息。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。14 3.2.5 系统管理模块。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15 3.2.6 主窗体菜单设计。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15 四软件测试。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15 五总结。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。15 参考资料:.......................................................17 南京邮电大学 通达学院 算法与数据结构设计报告( 2016/ 2017学年第二学期) 专业软件工程嵌入式 学号姓名 学号姓名 学号姓名 学号姓名 指导教师陈兴国 指导单位计算机学院计算机科学与技术系 日期2017-5-26 俄罗斯方块 一、课题内容 实现俄罗斯方块游戏。主要功能为游戏界面显示、上下左右键响应以及当前得分统计。通过该课题全面熟悉数组、字符串等的使用。掌握设计的基本方法及友好界面的设计。 课题要求: 1、游戏界面显示:下落方块和方块堆、左右移动、旋转、删除行等特效以及得分。 2、动作选择:上下左右键对应于旋转、加速、左右移动的功能。 3、得分统计判断:判定能否消除行、并统计得分总数等。 扩展要求: 1、用户数据管理。 二、算法设计与分析 I、俄罗斯方块游戏需要解决的问题包括 (1)、随机产生方块并自动下移 (2)键变体 (3)Q退出,按space暂停 II (1)、声明俄罗斯方块的结构体 (2)、函数原型声明 (3)、制作游戏窗口 (4)、制作俄罗斯方块 (5)、判断是否可动 (6)、随机产生俄罗斯方块类型序号 (7)、判断是否满行并删除满行的俄罗斯方块 (8)暂停,继续功能 (9)新游戏创建 (10)用户的创建,分数用户名的保存,查看分数 Tetris类(主要类) 该类包含m a i n方法,应为应用程序的主类。该类用来创建游戏的用户界面,事件处理功能和menu餐单,用户信息的存储。整个程序从该类的m a i n方法开始执行。 成员变量:String userName; 构造方法:Tetris 内部类:Members,Tetrisblock Tetrisblok类: 用来设计游戏界面。游戏界面显示在由Tetrisblok类创建的整个用户界面的中(Center)区,游戏的即时分数、方块的效果图及方的预览功能都在整个类里面实现。用来封装俄罗斯小方块。一个方块的属性是由方块1位置即x和y的坐标、颜色决定的。 成员变量 private int blockType; Timer timer=null; private int turnState; private int x; private int y; private int i = 0; int j = 0; static int score = 0; int flag = 0; int delay=1000; // 定义已经放下的方块x=0-12,y=0-22; int[][] map = new int[14][24]; // 方块的形状第一组代表方块类型有S、Z、L、J、I、O、T 7种第二组代表旋转几次第三四组为方块矩阵 private final int shapes[][][] 成员方法:public void newblock() public void drawwall() public void newmap() public void newgame() Java课程设计实验报告实验题目:打字游戏小程序 专业:计算机科学与技术系 班级:1202班 成员: Java课程设计(打字游戏小程序) 一、课程设计目的 经过一学期的java学习,能灵活运用书中和实验中所学习的各类知识和技巧,并且能在程序开发中得以很好的运用和发挥。在以后的学习和工作中,可以从中获取很好的经验,并且锻炼自己开发程序和创新的意识。 二、课程设计内容 1.课程设计简介 设计的是一个打字的小游戏,屏幕上不断地有英文字母下落,键盘输入字母,屏幕上与输入的字母形同的就会消失,并计分,如果有没有消去的字母掉到屏幕底,将扣分。 2.设计说明 因为要进行键盘操作,所以引用了event包,还要注册事件监听。字母是随机产生的,又要用。注册了线程。还要对窗口定义坐标,防止字母出现在同一位子。并且通过一位数组来给随机出现的字母做坐标定义。主要通过一位数组来控制字母的坐标,并且通过字母坐标的改变来对整个游戏的流程进行控制。 3.设计流程图 4.实现功能 随机产生字母,运用了键盘操作当按对屏幕中出现的字母时,该字母全部消失,并且在分数上相应的增加或减少。 5.详细设计(源代码) 1) packageDownCharGame; import import import /** *下落的字母实体类 *@authorshenbf * */ publicclassCharEntity{ raw(g); } etY()>=480){ etX((int)()*580)+30); chs[i].setY(0); chs[i].setColor(newColor((int)()*256), (int)()*256),(int)()*256))); chs[i].setCh((char)(65+(int)()*26))); } chs[i].down(); } repaint();tart(); } publicvoidkeyTyped(KeyEvente){ } publicvoidkeyPressed(KeyEvente){ } publicvoidkeyReleased(KeyEvente){ etCh()||key==chs[i].getCh()+32){ etY()俄罗斯方块mfc实验报告
大学java课程设计实验报告_计算器
俄罗斯方块实验报告
文件加密与解密—Java课程设计报告
java课程设计报告材料-俄罗斯方块
Java课程设计实验报告
俄罗斯方块C++课程设计报告-DOC
俄罗斯方块设计实验报告
Java课程设计实验报告及全部源码流程图
Java课程设计报告
俄罗斯方块游戏设计报告
JavaWeb课程设计实验报告
JAVA-课程设计报告
俄罗斯方块设计思想
java课程设计实验报告