首页 java课程设计---俄罗斯方块游戏

java课程设计---俄罗斯方块游戏

举报
开通vip

java课程设计---俄罗斯方块游戏java课程设计---俄罗斯方块游戏 石家庄职业技术学院 Java课程设计报告 俄罗斯方块游戏 学生姓名: 学 号: 系 别:信息工程系 专 业:软件技术 班 级: 指导教师: 论文提交时间:2013年x月x日 石家庄职业技术学院 目录 摘要 .................................................................................................................................

java课程设计---俄罗斯方块游戏
java课程设计---俄罗斯方块游戏 石家庄职业技术学院 Java课程设计报告 俄罗斯方块游戏 学生姓名: 学 号: 系 别:信息工程系 专 业:软件技术 班 级: 指导教师: 论文提交时间:2013年x月x日 石家庄职业技术学院 目录 摘要 ...................................................................................................................................... 2 一 游戏设计说明 ................................................................................................................. 3 1.1 游戏的设计及实现 .................................................................................................... 3 1.2 游戏流程图设计 ........................................................................................................ 3 二 详细设计 ........................................................................................................................ 4 2.1参数及界面................................................................................................................. 4 2.2初始化构造方法 ......................................................................................................... 5 2.3 初始化地图 ................................................................................................................ 5 2.4生成新方块的方法 ..................................................................................................... 5 2.5 旋转方法 ................................................................................................................... 6 2.6 判断是否合法方法 .................................................................................................... 6 2.7 消行方法 ................................................................................................................... 6 2.8 判断挂方法 ................................................................................................................ 7 三 测试 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 ........................................................................................................................ 8 四 设计体会 ........................................................................................................................ 8 五 游戏代码 ........................................................................................................................ 9 参考文献: ........................................................................................................................ 17 ~ 1 ~ 石家庄职业技术学院 摘要 俄罗斯方块游戏运用java实现具有一定功能的游戏软件,主要功能如下: 1. 控制对象左右下运动, 2. 控制对象旋转, 3. 判断对象是否越界, 4. 判断对象底下是否到底下或固定对象, 5. 判断某一行是否全有对象,然后消一行,加分, 6. 判断游戏进行是否挂了,然后自动重新开始,分数清零。 关键词:java、俄罗斯方块游戏、对象 ~ 2 ~ 石家庄职业技术学院 一 游戏设计说明 1.1 游戏的设计及实现 本游戏主要有以下5个主要方法: 1.MyPanel() 初始化构造方法; 2.newmap() 初始化地图; 3.newboxs() 生成新方块方法; 4.blow() 是否合法方法; 5.gobox() 消行方法; 1.2 游戏流程图设计 开始 初始化构造方法 旋转方法 左移方法 初画生 始围成 化墙 新 地方右移方法 图 块 下落方法 是把画消判 否当方行断 合前块方挂 法添方法 方 方加法 法 ma法 p ~ 3 ~ 石家庄职业技术学院 二 详细设计 2.1参数及界面 int boxs 方块类型 int scoer 分数 int boxscore 方块状态 int[][] map = new int[13][23] 定义已经放下的方块x=0-11,y=0-21 2.1游戏界面 ~ 4 ~ 石家庄职业技术学院 2.2初始化构造方法 开始,初始化方块、分数、地图等。 public MyPanel() { newboxs(); newmap(); Timer timer = new Timer(1000, new TimerListener()); timer.start(); drawbox(); } 2.3 初始化地图 开始游戏时,初始化参数。 public void newmap() { for (i = 0; i < 12; i++) { for (j = 0; j < 22; j++) { map[i][j] = 0; } } } 2.4生成新方块的方法 public void newboxs() { boxs = (int) (Math.random() * 1000) % 7; boxscode = (int) (Math.random() * 1000) % 4; x = 4; y = 0; if (gameover(x, y) == 1) { newmap(); drawbox(); score = 0; JOptionPane.showMessageDialog(null, "GAME OVER"); } } ~ 5 ~ 石家庄职业技术学院 2.5 旋转方法 通过按?来控制对象旋转,如果对象没有越界或附近没有固定对象可以旋 转,否侧失效。 public void turn() { int tempturnState = boxscode; boxscode = (boxscode + 1) % 4; if (blow(x, y, boxs, boxscode) == 1) { } if (blow(x, y, boxs, boxscode) == 0) { boxscode = tempturnState; } repaint(); } 2.6 判断是否合法方法 用来判断对象是否越界、是否继续下去等。 public int blow(int x, int y, int boxs, int boxscode) { for (int a = 0; a < 4; a++) { for (int b = 0; b < 4; b++) { if (((shapes[boxs][boxscode][a * 4 + b] == 1) && (map[x+ b + 1][y + a] == 1)) || ((shapes[boxs][boxscode][a * 4 + b] == 1) && (map[x+ b + 1][y + a] == 2))) { return 0; } } } return 1; } 2.7 消行方法 如果某一行全有固定对象,则消失某一行;否则不消失。 ~ 6 ~ 石家庄职业技术学院 public void gobox() 法 { int c = 0; for (int b = 0; b < 22; b++) { for (int a = 0; a < 12; a++) { if (map[a][b] == 1) { c = c + 1; if (c == 10) { score += 10; for (int d = b; d > 0; d--) { for (int e = 0; e < 11; e++) { map[e][d] = map[e][d - 1]; } } } } } c = 0; } } 2.8 判断挂方法 如果堆积满了则挂,并重新开始。 public int gameover(int x, int y) { if (blow(x, y, boxs, boxscode) == 0) { return 1; } return 0; } ~ 7 ~ 石家庄职业技术学院 三 测试分析 运行俄罗斯方块游戏,操作左右下运动、旋转运动没有卡现象,运行正常。分数增加、消行正常。 发现游戏一打开就自动开始了,没有考虑这点,使玩家成被动了。 四 设计体会 本次课程设计主要是运用本学期所学到的Java基础知识来设计一个符合要求的俄罗斯方块游戏,这期间我遇到了很多的困难,发现了很多的问题,正是在解决问题的期间我才慢慢地熟悉了Java的基础知识,才慢慢学会了如何去按照给定的要求设计出合适的java系统。通过本次课程设计,我明白了一个道理:无论做什么事情,都必需养成严谨,认真,善思的工作作风遇到问题最好的办法就是请教别人,因为每个人掌握的情况都不一样,一个人不可能做到处处都懂,必须发挥群众的力量,复杂的事情才能够简单化。这一点我深有体会,在很多时候我遇到的困难或许别人之前就遇到过,向他们请教远比自己在那边摸索来得简单来得快。 ~ 8 ~ 石家庄职业技术学院 五 游戏代码 MyJFrame.java package Russia; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; @SuppressWarnings({ "serial", "unused" }) public class MyJFrame extends JFrame implements ActionListener { public static boolean start=false; public MyJFrame() { Image icon = getToolkit().getImage( "F:\\java\\workspace\\Russia 1.1\\icon.png"); setIconImage(icon); setTitle("俄罗斯方块小游戏"); setLocation(470,130); setDefaultCloseOperation(MyJFrame.EXIT_ON_CLOSE); setSize(247,520); setVisible(true); setResizable(false); MyPanel a = new MyPanel(); addKeyListener(a); add(a); JMenuBar menu = new JMenuBar(); setJMenuBar(menu); JMenu game = new JMenu("游戏"); JMenuItem exit = game.add("退出"); menu.add(game); exit.addActionListener(this); } public static void main(String[] args) { MyJFrame frame = new MyJFrame(); } @Override ~ 9 ~ 石家庄职业技术学院 public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String s=e.getActionCommand(); if(s=="退出") System.exit(0); } } MyPanel.java package Russia; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.*; @SuppressWarnings("serial") class MyPanel extends JPanel implements KeyListener { private int boxs; //代表方块类型 private int score = 0; private int boxscode; // 代表方块状态 private int x; private int y; private int i = 0; int j = 0; int flag = 0; int[][] map = new int[13][23]; // 定义已经放下的方块x=0-11,y=0-21; public MyPanel() // 初始化构造方法 { newboxs(); newmap(); Timer timer = new Timer(1000, new TimerListener()); timer.start(); drawbox(); } public void newmap() // 初始化地图 { for (i = 0; i < 12; i++) ~ 10 ~ 石家庄职业技术学院 { for (j = 0; j < 22; j++) { map[i][j] = 0; } } } // 方块的形状 第一组代表方块类型有S、Z、L、J、I、O、T 7种 第二组 代表旋转几次 第 三组为 方块矩阵 private final int shapes[][][] = new int[][][] { { { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, // i { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 } }, { { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // s { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 } }, { { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // z { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, // j { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // o { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, // l { 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }, { { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // t { 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, { 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, ~ 11 ~ 石家庄职业技术学院 { 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 } } }; public void drawbox() //画围墙 { for (i = 0; i < 12; i++) { map[i][21] = 2; } for (j = 0; j < 22; j++) { map[11][j] = 2; map[0][j] = 2; } } public void newboxs() // 生成新方块的方法 { boxs = (int) (Math.random() * 1000) % 7; boxscode = (int) (Math.random() * 1000) % 4; x = 4; y = 0; if (gameover(x, y) == 1) { newmap(); drawbox(); score = 0; JOptionPane.showMessageDialog(null, "GAME OVER"); } } public void turn() // 旋转的方法 { int tempturnState = boxscode; boxscode = (boxscode + 1) % 4; if (blow(x, y, boxs, boxscode) == 1) { } if (blow(x, y, boxs, boxscode) == 0) { boxscode = tempturnState; } repaint(); } ~ 12 ~ 石家庄职业技术学院 public void left() // 左移的方法 { if (blow(x - 1, y, boxs, boxscode) == 1) { x = x - 1; } repaint(); } public void right() // 右移的方法 { if (blow(x + 1, y, boxs, boxscode) == 1) { x = x + 1; } repaint(); } public void down() // 下落的方法 { if (blow(x, y + 1, boxs, boxscode) == 1) { y = y + 1; gobox(); } if (blow(x, y + 1, boxs, boxscode) == 0) { add(x, y, boxs, boxscode); newboxs(); gobox(); } repaint(); } public int blow(int x, int y, int boxs, int boxscode) // 是否合法 的方法 { for (int a = 0; a < 4; a++) { for (int b = 0; b < 4; b++) { if (((shapes[boxs][boxscode][a * 4 + b] == 1) && (map[x+ b + 1][y + a] == 1)) || ((shapes[boxs][boxscode][a * 4 + b] == 1) && (map[x+ b + ~ 13 ~ 石家庄职业技术学院 1][y + a] == 2))) { return 0; } } } return 1; } public void gobox() // 消行的方法 { int c = 0; for (int b = 0; b < 22; b++) { for (int a = 0; a < 12; a++) { if (map[a][b] == 1) { c = c + 1; if (c == 10) { score += 10; for (int d = b; d > 0; d--) { for (int e = 0; e < 11; e++) { map[e][d] = map[e][d - 1]; } } } } } c = 0; } } public int gameover(int x, int y) //判断挂方法 { if (blow(x, y, boxs, boxscode) == 0) { return 1; } return 0; } ~ 14 ~ 石家庄职业技术学院 public void add(int x, int y, int blockType, int turnState) // 把当前添加map { int j = 0; for (int a = 0; a < 4; a++) { for (int b = 0; b < 4; b++) { if (map[x + b + 1][y + a] == 0) { map[x + b + 1][y + a] = shapes[blockType][turnState][j]; } j++; } } } public void paintComponent(Graphics g) // 画方块的的方法 { super.paintComponent(g); for (j = 0; j < 16; j++) // 画当前方块 { if (shapes[boxs][boxscode][j] == 1) { g.fillRect((j % 4 + x + 1) * 20, (j / 4 + y) * 20, 19, 19); } } for (j = 0; j < 22; j++) // 画已经固定的方块 { for (i = 0; i < 12; i++) { if (map[i][j] == 1) { g.fillRect(i * 20, j * 20, 19, 19); } if (map[i][j] == 2) { g.drawRect(i * 20, j * 20, 19, 19); } } } g.setColor(Color.red); ~ 15 ~ 石家庄职业技术学院 g.drawString("score=" + score, 100, 460); } public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_DOWN: down(); break; case KeyEvent.VK_UP: turn(); break; case KeyEvent.VK_RIGHT: right(); break; case KeyEvent.VK_LEFT: left(); break; } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } class TimerListener implements ActionListener { public void actionPerformed(ActionEvent e) { repaint(); if (blow(x, y + 1, boxs, boxscode) == 1) { y = y + 1; gobox(); } if (blow(x, y + 1, boxs, boxscode) == 0) { ~ 16 ~ 石家庄职业技术学院 if (flag == 1) { add(x, y, boxs, boxscode); gobox(); newboxs(); flag = 0; } flag = 1; } } } } 参考文献: 《Java程序设计教程》 主编:迟丽华 清华大学出版社 《Java程序设计案列汇编》 主编:焦玲等 中国铁道出版社 《Java课程设计》 主编: 耿祥义 清华大学出版社 《Java经典编程300例》 主编:明日科技 清华大学出版社 ~ 17 ~
本文档为【java课程设计---俄罗斯方块游戏】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_731942
暂无简介~
格式:doc
大小:61KB
软件:Word
页数:25
分类:生活休闲
上传时间:2017-09-30
浏览量:42