《java課程設計報告-俄羅斯方塊.doc》由會員分享,可在線閱讀,更多相關《java課程設計報告-俄羅斯方塊.doc(21頁珍藏版)》請在裝配圖網上搜索。
II
JAVA程序設計課程設計
之
俄羅斯方塊
年級:13級
班級:T412 網絡工程
指導老師:朱林
小組成員:
20138346021 許浩洋
時間:2015年11月11日
目錄
摘要
第一章 課程設計要求
第二章 設計概要
2.1 功能設計
2.2 功能分析
2.2.1 系統(tǒng)操作界面
2.2.2 程序主要功能說明
第三章 調試分析與測試結果
3.1 游戲運行界面
3.2 測試項目
3.2.1 功能區(qū)按鍵測試
3.2.2 鍵盤功能測試
3.2.3 游戲結束測試
第四章 設計總結
4.1 改進意見
4.2 《Java課程設計》心得體會
II
19
摘要
在現(xiàn)代,高科技的飛躍發(fā)展,人們工作習慣的改變,特別是電腦的大量普及,人們生活節(jié)奏越來越快,一些有趣的桌面游戲已經成為人們在使用計算機進行工作或學習之余休閑娛樂的首選,而俄羅斯方塊游戲是人們最熟悉的小游戲之一。俄羅斯方塊(Tetris, 俄文:Тетрис)是一款風靡全球的電視游戲機和掌上游戲機游戲,它由俄羅斯人阿列克謝·帕基特諾夫發(fā)明,故得此名。俄羅斯方塊的基本規(guī)則是移動、旋轉和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。由于上手簡單、老少皆宜,從而家喻戶曉,風靡世界。 為此,我們設計了一款簡單的俄羅斯方塊JAVA游戲程序,以便更好的滿足廣大電腦工作者閑暇之余的消遣,并且也讓我們學到編程技術與團隊意識。
關鍵字:俄羅斯方塊、JAVA游戲、編程
第1章 課程設計要求
題目名稱:俄羅斯方塊
題目類型:設計型
課程設計目的:
1)了解Java的基本使用方法。
2)熟悉eclipse的運行環(huán)境。
3)用JAVA來設計一個俄羅斯方塊的小游戲。
4)基本實現(xiàn)俄羅斯方塊的應用功能。
實驗原理:
JAVA程序分析與設計、類的靈活運用、多態(tài)技術、模板技術、異常處理等。
實驗內容:
本俄羅斯方塊游戲是對于隨機給出不同的形狀(長條形、Z字形、反Z形、田字形、L字形、反L形、T字型)下落填充給定的區(qū)域,若填滿一條便消掉,記分。若在游戲中各形狀填滿了給定區(qū)域,為輸者。
第二章 設計概要
2.1 功能設計
本項目是為了實現(xiàn)俄羅斯方塊的基本功能而設計的,基本能夠達到俄羅斯方塊的各種游戲性。項目需求分析如下:
1)由方塊組成的不同的隨機圖形會從區(qū)域上方開始緩慢落下。
2)玩家可以做的操作有:
以90度為單位旋轉方每一格塊。
以格子為單位左右移動方塊,讓方塊加速落下。
3)方塊移到區(qū)域最下方或是著地到其他方塊上無法移動時,就會固定在該處,而新的隨機圖形會出現(xiàn)在區(qū)域上方開始落下。
4)當區(qū)域中某一列橫向格子全部由方塊填滿,則該列會自動消除并成為玩家的得分。
5)一次性銷毀不同行數(shù)方塊得分不同,一行1分,兩行2分,三行5分,四行10分。
6)當固定的方塊堆到區(qū)域最上方,則游戲結束。
處理玩家操作
2.2 功能分析
2.2.1 系統(tǒng)操作界面
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;
//游戲銷毀行數(shù)
private int lines;
//一次性銷毀行數(shù)的計分標準(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);
//取消系統(tǒng)默認布局
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);
//繪制分數(shù)墻
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
=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);
}
//檢查游戲是否結束(思路:游戲主面板中第一行出現(xiàn)四個方塊的區(qū)域有小方塊cell在則游戲結束)
private boolean gameOver() {
gameOver = wall[0][3]!=null||wall[0][4]!=null;
return gameOver;
}
//清零游戲結束現(xiàn)場(停止計時器)
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() {
//四格方塊繼續(xù)下落
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];
//每一種四格方塊都有旋轉狀態(tài)(旋轉方式)
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
下載提示(請認真閱讀)
- 1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網址水印。
- 3、該文檔所得收入(下載+內容+預覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領!既往收益都歸您。
文檔包含非法信息?點此舉報后獲取現(xiàn)金獎勵!
下載文檔到電腦,查找使用更方便
32
積分
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
-
java
課程設計
報告
俄羅斯方塊
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://italysoccerbets.com/p-1546665.html