下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

package com.game;

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.*;

import javax.swing.Timer;

/**

* 俄罗斯方块

* @author ×××

*

*/

public class Tetris extends JFrame {

public Tetris() {

Tetrisblok a = new Tetrisblok();

addKeyListener(a);

add(a);

}

public static void main(String[] args) {

Tetris frame = new Tetris();

JMenuBar menu = new JMenuBar();

frame.setJMenuBar(menu);

JMenu game = new JMenu("游戏");

JMenuItem newgame = game.add("新游戏");

JMenuItem pause = game.add("暂停");

JMenuItem goon = game.add("继续");

JMenuItem exit = game.add("退出");

JMenu help = new JMenu("帮助");

JMenuItem about = help.add("关于");

menu.add(game);

menu.add(help);

frame.setLocationRelativeTo(null);

frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(220,275);

frame.setTitle("Tetris内测版");

// frame.setUndecorated(true);

frame.setVisible(true);

frame.setResizable(false);

}

}

// 创建一个俄罗斯方块类

class Tetrisblok extends JPanel implements KeyListener {

// blockType 代表方块类型

// turnState代表方块状态

/**

* 代表方块类型

*/

private int blockType;

private int score = 0;

/**

* 代表方块状态

*/

private int turnState;

private int x;

private int y;

private int i = 0;

int j = 0;

int flag = 0;

// 定义已经放下的方块x=0-11,y=0-21;

int[][] map = new int[13][23];

// 方块的形状 第一组代表方块类型有S、Z、L、J、I、O、T 7种 第二组 代表旋转几次 第三四组为 方块矩阵

private final int shapes[][][] = new int[][][] {

// i

{ { 0,1,0 },{ 0,0 } },// s

{ { 0,{ 1,// z

{ { 1,// j

{ { 0,// o

{ { 1,// l

{ { 1,// t

{ { 0,0 } } };

/**

* 生成新方块的方法

*/

public void newblock() {

blockType = (int) (Math.random() * 1000) % 7;

turnState = (int) (Math.random() * 1000) % 4;

x = 4;

y = 0;

if (gameover(x,y) == 1) {

newmap();

drawwall();

score = 0;

JOptionPane.showMessageDialog(null,"GAME OVER");

}

}

/**

* 画围墙

*/

public void drawwall() {

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

for (i = 0; i < 12; i++) {

for (j = 0; j < 22; j++) {

map[i][j] = 0;

}

}

}

/**

* 初始化构造方法

*/

Tetrisblok() {

newblock();

newmap();

drawwall();

Timer timer = new Timer(1000,new TimerListener());

timer.start();

}

/**

* 旋转的方法

*/

public void turn() {

int tempturnState = turnState;

turnState = (turnState + 1) % 4;

if (blow(x,y,blockType,turnState) == 1) {

}

if (blow(x,turnState) == 0) {

turnState = tempturnState;

}

repaint();

}

/**

* 左移的方法

*/

public void left() {

if (blow(x - 1,turnState) == 1) {

x = x - 1;

}

;

repaint();

}

/**

* 右移的方法

*/

public void right() {

if (blow(x + 1,turnState) == 1) {

x = x + 1;

}

;

repaint();

}

/**

* 下落的方法

*/

public void down() {

if (blow(x,y + 1,turnState) == 1) {

y = y + 1;

delline();

}

;

if (blow(x,turnState) == 0) {

add(x,turnState);

newblock();

delline();

}

;

repaint();

}

/**

* 是否合法的方法

* @param x

* @param y

* @param blockType

* @param turnState

* @return

*/

public int blow(int x,int y,int blockType,int turnState) {

for (int a = 0; a < 4; a++) {

for (int b = 0; b < 4; b++) {

if (((shapes[blockType][turnState][a * 4 + b] == 1) && (map[x

+ b + 1][y + a] == 1))

|| ((shapes[blockType][turnState][a * 4 + b] == 1) && (map[x

+ b + 1][y + a] == 2))) {

return 0;

}

}

}

return 1;

}

/**

* 消行的方法

*/

public void delline() {

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;

}

}

/**

* 判断你挂的方法

* @param x

* @param y

* @return

*/

public int gameover(int x,int y) {

if (blow(x,turnState) == 0) {

return 1;

}

return 0;

}

/**

* 把当前添加map

* @param x

* @param y

* @param blockType

* @param turnState

*/

public void add(int x,int turnState) {

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[blockType][turnState][j] == 1) {

g.fillRect((j % 4 + x + 1) * 10,(j / 4 + y) * 10,10,10);

}

}

// 画已经固定的方块

for (j = 0; j < 22; j++) {

for (i = 0; i < 12; i++) {

if (map[i][j] == 1) {

g.fillRect(i * 10,j * 10,10);

}

if (map[i][j] == 2) {

g.drawRect(i * 10,10);

}

}

}

g.drawString("score=" + score,125,10);

g.drawString("抵制不良游戏,",50);

g.drawString("拒绝盗版游戏。",70);

g.drawString("注意自我保护,",90);

g.drawString("谨防受骗上当。",110);

g.drawString("适度游戏益脑,",130);

g.drawString("沉迷游戏伤身。",150);

g.drawString("合理安排时间,",170);

g.drawString("享受健康生活。",190);

}

/**

* 键盘监听

*/

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

}

/**

* 定时器监听

* @author ***

*

*/

class TimerListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

repaint();

if (blow(x,turnState) == 1) {

y = y + 1;

delline();

}

;

if (blow(x,turnState) == 0) {

if (flag == 1) {

add(x,turnState);

delline();

newblock();

flag = 0;

}

flag = 1;

}

;

}

}

}

@H_502_6@

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

总结

以上是编程之家为你收集整理的Java俄罗斯方块实现代码全部内容,希望文章能够帮你解决Java俄罗斯方块实现代码所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

java程序设计俄罗斯方块_Java俄罗斯方块实现代码相关推荐

  1. java程序设计作业_Java程序设计作业

    北 京 师 范 大 学 网 络 教 育 <JAVA程序设计>作业 本课程作业由两部分组成.第一部分为"客观题部分",由15个选择题组成,每题1分,共15分.第二部分为& ...

  2. java程序设计答案_JAVA程序设计课后练习答案.pdf

    <Java程序设计>课后练习答案 第一章 Java概述 一.选择题 1. ( A )是在Dos命令提示符下编译Java程序的命令,( B )是运行Java 程序的 命令. A. javac ...

  3. java程序设计入门_Java程序设计从入门到精通

    Java程序设计从入门到精通 编辑 锁定 讨论 上传视频 <Java程序设计从入门到精通>是2018年1月电子工业出版社出版的图书,作者是毛雪涛.丁毓峰. 书    名 Java程序设计从 ...

  4. java程序设计题目_Java程序设计习题集(含答案).doc

    目 录 一.判断题2 二.选择题4 三.填空题17 四.写出下列程序完成的功能25 五.写出下面程序的运行结果29 六.使用Java语言编写程序33 七.简答题34 Java程序设计习题集 一.判断题 ...

  5. java程序设计复习题_java程序设计复习大全(100题及答案).doc

    java程序设计复习大全(100题及答案) Java程序设计总复习题 编写一个Java程序,用if-else语句判断某年份是否为闰年.(分支) // Programme Name LeapYear.j ...

  6. 专科java程序设计试卷_java程序设计试卷(含答案)

    ----------------密----------------封----------------线----------------- 年级: 层次: 专业: 学号: 姓名: 2015年春季学期 & ...

  7. java程序设计 日历_JAVA程序设计(日历记事本)

    JAVA程序设计(日历记事本) import java.util.Calendar; import javax.swing.*; import java.awt.*; import java.awt. ...

  8. java程序设计计算器_Java程序设计计算器(含代码)

    Java程序课程设计任务书 实用性计算器的设计与开发 1.主要内容: 开发一个实用型的计算器程序,实现基本的计算功能同时并进行相应的功能拓展,使其具更加人性化的功能.我们可以用其进行相应的计算功能来方 ...

  9. 实用Java程序设计教程_java程序设计实用教程 书中代码.pdf

    例2-1 Example2_1.java public class Example2_1 { public static void main(String args[]) { Rect rectang ...

  10. java 抓屏_java抓屏代码

    一个网上找下来的 抓屏代码只需呀输入要存放的路径和名字 就可以执行,但不能为空. import java.awt.Dimension; import java.awt.Rectangle; impor ...

最新文章

  1. 推荐:李沐开源新作,一起来《动手学深度学习》
  2. coreelec ssh访问被拒绝_GitLab官网在线仓库SSH连接故障排查和经验总结实例
  3. 算法训练 Torry的困惑
  4. kickstart_具有Java Kickstart的MongoDB
  5. 【转】C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁
  6. 计算机仿真随机数生成,伪随机数生成器研究
  7. using(){},Close(),Dispose()的区别
  8. C++提高部分_C++类模板对象做函数参数---C++语言工作笔记090
  9. this指向问题(call、apply、blind),自我理解的
  10. 【转】kubernetes 中 deployment 支持哪些键值
  11. 如何写python程序
  12. ES Java REST Client 官方文档
  13. 296.deepin下载安装、root改密、cpu不降频、修改快捷键、创建启动器快捷方式、win文件访问、直接进win无deepin启动项...
  14. 开放电脑站点81端口
  15. (端到端多尺度去雾算法)FAMED-Net: A Fast and Accurate Multi-scale End-to-end Dehazing Network
  16. AMD CEO辞职令业内震惊:邓元鋆有点尴尬
  17. WC2016 挑战NPC
  18. 计算机科学与技术专业 ppt,计算机科学与技术专业.ppt
  19. Vue里的ElementUi点击行 如何获取 Table 的行索引
  20. Java哈希表及其应用

热门文章

  1. DB2数据库添加 更改字段
  2. CPLEX导出数据到EXCEL
  3. 在Kali中安装foremost
  4. redis的设计与实现
  5. VScode安装并设置SVN插件
  6. Ross《概率论基础教程》—Note 1
  7. CSS技巧之数字美化为机械字体样式
  8. 数据结构精品电子书分享之《数据结构题集(C语言版)》
  9. 产品经理-思维导图梳理功能
  10. linux 小巧的浏览器,Linux奇技淫巧:一款特别轻量级的网页浏览器