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

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

JAVA程序设计课程设计

俄罗斯方块

年级:13级

班级:T412 网络工程

指导老师:朱林

小组成员:

20138346021 许浩洋

II

时间: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)

};

}

}

第三章调试分析与测试结果3.1 游戏运行界面

3.2 测试项目

3.2.1 功能区按键测试

测试结果:

开始:游戏自动开始,方块下落;

暂停:P键游戏暂停;

继续:C键游戏继续;

重来:S键重新开始

退出:游戏退出;

(注:游戏在输入法英文状态下才可运行)

3.2.2 键盘功能测试

测试结果:

方向键“↑”:旋转方块;

方向键“↓”:使方块加速下落;

方向键“←”:使方块左移;

方向键“→”:使方块右移。

空格键“space”:方块立即下落.

3.2.3 游戏结束测试

第四章设计总结

4.1 改进意见

本程序中还存在一些不足之处,例如:

1.进一步地功能扩展,如添加音效等;

2.美化玩家进入游戏的界面;

3.对软件进行进一步更详细的测试,以保证软件的可用性和适应性;

俄罗斯方块mfc实验报告

程序设计实践 设 计 报 告 课题名称:俄罗斯方块(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

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

俄罗斯方块游戏的开发 组长: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的四周留空间。

大学java课程设计实验报告_计算器

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/c416886646.html,ng.String; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; import https://www.360docs.net/doc/c416886646.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个

C语言课程设计报告 俄罗斯方块改进版

课程设计 俄罗斯方块改进 2016年4月20 日 设计题目 学号 专业班级 学生姓名 指导教师

目录 1. 课程设计目的错误!未定义书签。 2. 功能分析错误!未定义书签。 3. 程序设计实现过程错误!未定义书签。 程序总体设计结构错误!未定义书签。 界面设计错误!未定义书签。 重要数据的数据结构设计错误!未定义书签。函数设计错误!未定义书签。 4. 运行效果错误!未定义书签。 5. 源代码详解错误!未定义书签。 6. 参考文献错误!未定义书签。

俄罗斯方块改进 1. 课程设计问题 据百度百科,俄罗斯方块(Tetris)是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。游戏的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。 要求支持键盘操作和7种不同类型方块的旋转变换,并且界面上显示下一个方块的提示以及当前的玩家的得分,随着游戏的进行,等级越高,游戏难度越大,即方块的下落速度越快,相应的等级,等级越高,消去一行所得到的分数越高,为玩家提供了不同的选择。 2. 功能分析 俄罗斯方块游戏需要解决的问题包括: ⑴按任意键开始游戏,随机产生方块并自动下移 ⑵用Esc键退出游戏。 ⑶用键变换方块 ⑷用键和键左右移动方块 ⑸用键使方块加速下移 ⑹用空格键使方块暂停 ⑺能正确判断满行并消行、计分、定级别 ⑻设定游戏方块为不同形状重点: *游戏面包的数据结构:二维数组 *7种形状方块的数据结构:结构体保存每种形状方块的坐标 3. 程序设计实现过程 程序总体设计结构 首先初始化进入图形模式,进入欢迎界面,玩家按任意进入主菜单界面,按键进入游戏界面,键然后设置新的时钟中断。开始游戏后,进入该程序最核心的部分——处理和实现进行过程中的各种事件和函数。在处理中判断游戏是否结束,如果没有结束,则重新开始游戏,否则结束游戏。 详解如下: (1)游戏方块预览功能。在游戏过程中,当在游戏底板中出现一个游戏方块时,必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家控制游戏的策略。由于在此游戏中存在19种不同的游戏方块,所以在游戏方块预览区域中需要显示随机生成的游戏方块。

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页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能

俄罗斯方块设计实验报告

——————数字电路与逻辑设计实验报告—————基于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为右)若无键按下,则根据情况当前点是否需要自动下移。

俄罗斯方块C++课程设计报告-DOC

课程设计报告 题目:基于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

C课程设计-俄罗斯方块

C#程序设计实训报告 题目:俄罗斯方块 专业____计算机科学与技术 _ 年级班别___ 计算机09-2班__ 学号 学生姓名_____ _______ 指导教师_ 成绩 2012 年 1 月

目录 一系统设计要求 (3) 课题分析............................................................................. 错误!未定义书签。 设计环境 (3) 设计思路 (3) 二课题总体框架设计 (3) 程序流程图 (4) 类的结构图 (5) 三课题实现 (6) 程序主界面 (6) 开始游戏界面 (6) 游戏结束界面 (7) 暂停游戏界面 (7) 使用说明界面 (8) 关键程序代码 (8) 四总结 (21) 设计总结 (21) 设计体会 (22)

一、系统设计要求 1.1课题分析 本游戏系统是利用C#实现的,是制作为我们所熟悉的非常简单的俄罗斯方块游戏,该系统能实现的具体功能如下: 1).能简便的开始游戏,游戏中的方块的功能与日常我们所熟悉的游戏的功能一致,各种块的设置也一致,包括方块的旋转,加速下降,左右移动,满行消去,满行消去自动加分,以及到顶游戏结束等功能; 2).能够通过对话框窗体说明各个功能的使用说明,以及一些其他功能。 3).界面简洁美观,简单易用。跟其他一般的游戏相差不大。 1.2设计环境 本程序选择Visual Studio 2010作为实验环境。 设计思路 用面向对象的方法分析系统 对于俄罗斯方块的程序制作,我们可以定义一个或者几个类,专门来描述俄罗斯方块,在这个类中,包含与之相关的方法、属性和字段,通过封装,实现其业务逻辑。其中,每一个俄罗斯方块都有相同的特征,由4个小正方形构成,有旋转,左右移动,下落的动作,整行被填满除去并计算分数而构成行的小正方体块。基中块的形状类型有7种:田、一、L、倒L、Z、倒Z、上。 在窗口中通过调用主窗体Form1当中的菜单栏来设置游戏的开始、暂停、结束、重新开始以及推出程序。还可以通过其菜单中游戏说明选项来查看游戏各个键的使用说明,还可调用帮助菜单来查看版权说明。 二、课题总体框架设计

Java课程设计实验报告及全部源码流程图

课程设计 一、实验目的 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页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能齐全、符合操作习惯。 下面是程序运行效果截图: 日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够显示当前日期,并能够选择背景图片):

java课程设计俄罗斯方块

Java课程设计报告 2010 / 2011 学年第二学期 项目名称:俄罗斯方块游戏 项目负责人:李俊杰学号:09030317 同组者:田俊学号:09030325 同组者:殷崧健学号:09030335 指导教师:费贤举班级:09软件课程设计时间:2011年6月21日-2011年7月7日课程设计地点:秋白楼B705 常州工学院计算机信息工程学院 2011年7月7日

目录 1.系统概述 (3) 2.项目计划书以及小组人员分工 (4) 3.系统流程图 (5) 4.系统操作界面 (8) 5.详细设计 (9) 6.用户手册与游戏帮助 (18) 7.测试计划 (20) 8.改进意见 (22) 9.课程设计心得体会 (23) 10.参考书籍及资料 (24)

系统概述 1.1 现状分析 在个人电脑日益普及的今天,一些有趣的桌面游戏已经成为人们在使用计算机进行工作学习之余休闲娱乐的首选,而俄罗斯方块游戏是人们最熟悉的小游戏之一,它以其趣味性强,易上手等诸多特点得到了大众认可,因此开发此游戏软件可满足人们的一些娱乐需求。 此俄罗斯方块游戏可以为用户提供一个可在普通个人电脑上运行的,界面美观的,易于控制的俄罗斯方块游戏。 1.2 项目要求 俄罗斯方块是一款适合大众的游戏软件,它适合不同年龄的人玩。本软件实现的基本功能如下: ●游戏区:玩家可以在游戏区中堆积方块,并能够在游戏过程中随 时了解得分情况和下一个将要出现方块的提示。 ●游戏控制:玩家可以通过游戏控制功能来控制游戏开始,暂停, 结束游戏,游戏难度的设置以及音效控制。 ●玩家游戏信息存储及删除:玩家的得分在前五名时,将会记录在 排行榜上,同时可为玩家清空排行榜。 1.3 系统模块结构图

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课程设计》心得体会 ......................................

JavaWeb课程设计实验报告

湖南科技大学计算机科学与工程学院 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、订单管理:对用户的订单进行管理。

c-俄罗斯方块-课程设计报告-刘阳

c-俄罗斯方块-课程设计报告-刘阳吉林工程技术师范学院 信息工程学院 《 C语言程序设计》 课程设计报告题目: 俄罗斯方块专业: 计算机科学与技术班级: 计算机1241 姓名: 刘阳学号: 1201044120 指导教师:郭天娇时间:2013年6月17日至2013年6月28日 摘要 俄罗斯方块,Tetris, 俄文,Тетрис,是一款风靡全球的电视掌上游戏机游戏,它由俄罗斯人阿列克谢?帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。 原本是前苏联科学家阿列克谢?帕基特诺夫所开发的教育用软件,之后开始提供授权给各个游戏公司,造成各平台上软件大量发行的现象。 由于俄罗斯方块具有的数学性、动态性与知名度,也经常拿来作为游戏程序设计的练习题材。 俄罗斯方块曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。 俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。 关键字,经典俄罗斯方块游戏

I 目录 摘要 .............................................. 错误~未定义书签。错误~未定义书签。 目 录 ..................................................................... ............................................... 1第一章课程设计的目 的 ..................................................................... ............. 2 第二章设计方案的论 证 ..................................................................... .......... 3-4 第三章设计实现过 程 ..................................................................... ................. 5 第四章调试运行及结果分 析 ..................................................................... .. 6-7 第五章测试及问题探 讨 ..................................................................... ............. 8 第六章课设总结及体 会 ..................................................................... ............. 9 第七章致 谢 ..................................................................... ............................... 10 第八章参考文 献 ..................................................................... ....................... 11 第九章附

java课程设计实验报告

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()

51单片机课程设计 俄罗斯方块

单片机课程设计 俄罗斯方块 学院:工程技术学院 专业:08级电子科学与技术 小组成员: 何冠羲,马志祥,李洋,张世刚,叶彪,郑先安,洪之

目录 摘要 引言 1.程序整体思路 2.8X8LED模块显示原理 3.硬件电路仿真图 4.图形显示 5.消层算法 6.旋转算法 7.实物焊接 8.心得体会 附录程序代码

摘要 记得在很小的时候,有一种掌上游戏机,里面有一款游戏叫做俄罗斯方块,那时的我们只是简单的按照游戏规则进行“堆积木”,而其中的原理却很少有人去思考,毕竟当时的我们都还很年幼。 基于单片机课程设计的机会,我们这个小组将使用51单片机和8x8led的组合,来实现比较简单的俄罗斯方块设计。 此次设计初期是在keil和proteus联合仿真中进行,编程语言为51汇编,后期是进行实物焊接。 论文描述了俄罗斯方块的主要功能函数的实现,算法分析和实物焊接过程中遇到的问题。 关键词:俄罗斯方块;算法; 8X8led;

引言 游戏是人们活动中一项非常重要的内容,有人认为如果哪一天人类对所有的游戏都失去兴趣,恐怕世界的末日就要到了。电脑对游戏的贡献有目共睹,现在摸过电脑的人很少有没玩过电脑游戏的,喜欢游戏的人也很少有不玩电脑的。 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在联众又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在"联众俄罗斯方块"中,更有一些联众网络游戏所独有的魅力――有单机作战与两人在线对战两种模式,用户可任选一种进行游戏。网络模式还增加了积分制,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。 俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。本文利用单片机进行俄罗斯方块设计,采用51汇编语言进行编程,基于汇编语言的原因是在编写程序的过程中,对于程序的执行会有一个比较直观的表现。

俄罗斯方块实验报告

俄罗斯方块实验报告 编写“俄罗斯方块”游戏 1、问题分析。 编写俄罗斯方块游戏,首先是界面问题,要有一个相对美观的游戏界面,可以有很多种解决的方法,可以用DOS的界面,也可以用MFC做。 界面做好后,最重要的就是七个方块如何存放,翻转,显示等等一系列问题,首先,我们要把这七个方块用一种数据结构存储起来;其次,在游戏中将这七个方块随机挑选出来并显示在屏幕上,根据键盘事件进行旋转;最后,判断到达底部的方块是简单叠加还是引发消除事件。 普通俄罗斯方块游戏中,只有七个基本方块:|,Z,N,L,7,|-,O,方块都可以画在一个4*4的方格中。于是就有两个方法:一个是只存储七个方块,在游戏运行的时候计算旋转后的方块形状;另一个是将所有的方块全部存储起来,在游戏运行的时候计算取其中的哪个方块。 另外,考虑到4*4是16,而一个int正好是16位(TC2是16位,其他的是32位),所以可以把一个方块存储在一个int数据中,取出的时候,判断它的每个bit位,为1处有小方块,为0处是空白。 所以可以分别用二维数组和bit的方法来表示这些方块。 对于二维数组而言,其控制旋转的操作会很简单,就是控制数组的行列以决定到底该取出哪一种方块,所以程序中我会采用这种方法。 如何控制方块的下落速度,如何让实现左移,右移,下落,如何销行,如何计分,又如何加速等等都是需要考虑的问题。 对于控制方块的下落速度,首先应该现弄明白方块是怎样下落的,目前最常用的就是每隔一定得时间进行重新绘图,就像动画片一样,当很多副相关的画面不断在人眼前播放,由于人眼的掩蔽效应就会形成动着的画面,看起来就是物体在那里移动,于此原理相同,当改变方块在画面上的位置,再以一定得时间间隔进行重新刷图,其效果看起来就是方块在移动;也就是说控制方块下落速度的其实就是控制重新绘图的时间间隔,控制时间的函数有以下几种:a)调用函数SetTimer()设置定时间隔,如SetTimer(0,200,NULL)即为设置 200毫秒的时间间隔。 b)在应用程序中增加定时响应函数OnTimer(),并在该函数中添加响应的处理 语句,用来完成时间到时的操作。这种定时方法是非常简单的,但其定时功能如同Sleep()函数的延时功能一样,精度较低,只可以用来实现诸如位图的动态显示等对定时精度要求不高的情况,而在精度要求较高的条件下,这种方法应避免采用。 c)精度时控函数,在要求误差不大于1毫秒的情况下,可以采用

相关文档
最新文档