Java课程设计------俄罗斯方块(Tetris)

本文介绍了一款使用Java编写的俄罗斯方块游戏。代码实现了游戏的基本功能,包括方块生成、移动、旋转、碰撞检测和游戏结束条件。游戏界面包含菜单栏,支持新游戏、暂停和继续操作。通过监听键盘事件控制方块的下落、左右移动和旋转。
摘要由CSDN通过智能技术生成

俄罗斯方块

相信大家从小就玩过俄罗斯方块的,多余的话就不多说了,代码是有生命的,就让代码来说话好了

[java]  view plain   copy
  1. package cn.hncu.games;  
  2.   
  3. import java.awt.Color;  
  4. import java.awt.Font;  
  5. import java.awt.Graphics;  
  6. import java.awt.HeadlessException;  
  7. import java.awt.event.ActionEvent;  
  8. import java.awt.event.ActionListener;  
  9. import java.awt.event.KeyAdapter;  
  10. import java.awt.event.KeyEvent;  
  11.   
  12. import javax.swing.JFrame;  
  13. import javax.swing.JMenu;  
  14. import javax.swing.JMenuBar;  
  15. import javax.swing.JMenuItem;  
  16. import javax.swing.JOptionPane;  
  17. import javax.swing.JPanel;  
  18. import javax.swing.Timer;  
  19.   
  20. public class Tetris extends JFrame {  
  21.     private TetrisPanel a;  
  22.     private JMenuItem j1,j2,j3;  
  23.       
  24.     public Tetris() {  
  25.         // 添加菜单,此处仅示意技术,不写完善  
  26.         JMenuBar menubar = new JMenuBar();  
  27.         setJMenuBar(menubar);  
  28.         // 菜单  
  29.         JMenu menuGame = new JMenu("游戏");  
  30.         menubar.add(menuGame);  
  31.   
  32.         // 菜单项  
  33.         j1 = new JMenuItem("新游戏");  
  34.         j1.setActionCommand("newGame");  
  35.         menuGame.add(j1);  
  36.         j2 = new JMenuItem("暂停");  
  37.         j2.setActionCommand("pause");  
  38.         menuGame.add(j2);  
  39.         j3 = new JMenuItem("继续");  
  40.         j3.setActionCommand("resume");  
  41.         menuGame.add(j3);  
  42.           
  43.         // 菜单项监听  
  44.         MenuListener ml = new MenuListener();  
  45.         j1.addActionListener(ml);  
  46.         j2.addActionListener(ml);  
  47.         j3.addActionListener(ml);  
  48.           
  49.         //另一种添加方式  
  50.         menuGame.add("其它").addActionListener(ml);  
  51.           
  52.           
  53.         // 为了在菜单监听器类中访问a对象,提升作用域  
  54.         // TetrisPanel a = new TetrisPanel();  
  55.         a = new TetrisPanel();  
  56.         this.addKeyListener(a.listener);  
  57.         // this.add(a);正式开发不用this,运行效率更高  
  58.         add(a);  
  59.   
  60.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  61.         setSize(220275);  
  62.         setLocation(400100);  
  63.         setTitle("俄罗斯方块精简版");  
  64.         setResizable(false);  
  65.     }  
  66.   
  67.     public static void main(String[] args) {  
  68.         Tetris te = new Tetris();  
  69.         te.setVisible(true);  
  70.     }  
  71.   
  72.     /* 
  73.      * 用面板当画布,界面刷新效果更好 
  74.      */  
  75.     class TetrisPanel extends JPanel {  
  76.         private int blockType; // 0-6 3  
  77.         private int turnState; // 0-3 2  
  78.         private int x;  
  79.         private int y;  
  80.   
  81.         private int score;  
  82.         private int delay;  
  83.   
  84.         private TimerListener listener = new TimerListener();  
  85.         private Timer timer;  
  86.   
  87.         // 定义地图,用来存放整个游戏方块区的状态(显示方格或不显示)  
  88.         // 存放块的位置:x=0~11 y=0~21  
  89.         // ----22行12列(其中一行两列是外框),行列的序号位置跟我们平时写的是相反的map[列号][行号]  
  90.         int[][] map = new int[13][23];// 为解决越界,在边上预留了1列  
  91.   
  92.         // 方块的形状:  
  93.         // 第一维代表方块类型(包括7种:S、Z、L、J、I、O、T)  
  94.         // 第二维代表旋转次数  
  95.         // 第三四维代表方块矩阵  
  96.         int shapes[][][] = new int[][][] {  
  97.         /* 
  98.          * 模板 { {0,0,0,0,0,0,0,0, 0,0,0,0, 0,0,0,0}, {0,0,0,0,0,0,0,0, 0,0,0,0, 
  99.          * 0,0,0,0}, {0,0,0,0,0,0,0,0, 0,0,0,0, 0,0,0,0}, {0,0,0,0,0,0,0,0, 
  100.          * 0,0,0,0, 0,0,0,0} } 
  101.          */
  • 9
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值