java程序设计俄罗斯方块_Java俄罗斯方块实现代码
下面是编程之家 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俄罗斯方块实现代码相关推荐
- java程序设计作业_Java程序设计作业
北 京 师 范 大 学 网 络 教 育 <JAVA程序设计>作业 本课程作业由两部分组成.第一部分为"客观题部分",由15个选择题组成,每题1分,共15分.第二部分为& ...
- java程序设计答案_JAVA程序设计课后练习答案.pdf
<Java程序设计>课后练习答案 第一章 Java概述 一.选择题 1. ( A )是在Dos命令提示符下编译Java程序的命令,( B )是运行Java 程序的 命令. A. javac ...
- java程序设计入门_Java程序设计从入门到精通
Java程序设计从入门到精通 编辑 锁定 讨论 上传视频 <Java程序设计从入门到精通>是2018年1月电子工业出版社出版的图书,作者是毛雪涛.丁毓峰. 书 名 Java程序设计从 ...
- java程序设计题目_Java程序设计习题集(含答案).doc
目 录 一.判断题2 二.选择题4 三.填空题17 四.写出下列程序完成的功能25 五.写出下面程序的运行结果29 六.使用Java语言编写程序33 七.简答题34 Java程序设计习题集 一.判断题 ...
- java程序设计复习题_java程序设计复习大全(100题及答案).doc
java程序设计复习大全(100题及答案) Java程序设计总复习题 编写一个Java程序,用if-else语句判断某年份是否为闰年.(分支) // Programme Name LeapYear.j ...
- 专科java程序设计试卷_java程序设计试卷(含答案)
----------------密----------------封----------------线----------------- 年级: 层次: 专业: 学号: 姓名: 2015年春季学期 & ...
- java程序设计 日历_JAVA程序设计(日历记事本)
JAVA程序设计(日历记事本) import java.util.Calendar; import javax.swing.*; import java.awt.*; import java.awt. ...
- java程序设计计算器_Java程序设计计算器(含代码)
Java程序课程设计任务书 实用性计算器的设计与开发 1.主要内容: 开发一个实用型的计算器程序,实现基本的计算功能同时并进行相应的功能拓展,使其具更加人性化的功能.我们可以用其进行相应的计算功能来方 ...
- 实用Java程序设计教程_java程序设计实用教程 书中代码.pdf
例2-1 Example2_1.java public class Example2_1 { public static void main(String args[]) { Rect rectang ...
- java 抓屏_java抓屏代码
一个网上找下来的 抓屏代码只需呀输入要存放的路径和名字 就可以执行,但不能为空. import java.awt.Dimension; import java.awt.Rectangle; impor ...
最新文章
- 推荐:李沐开源新作,一起来《动手学深度学习》
- coreelec ssh访问被拒绝_GitLab官网在线仓库SSH连接故障排查和经验总结实例
- 算法训练 Torry的困惑
- kickstart_具有Java Kickstart的MongoDB
- 【转】C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁
- 计算机仿真随机数生成,伪随机数生成器研究
- using(){},Close(),Dispose()的区别
- C++提高部分_C++类模板对象做函数参数---C++语言工作笔记090
- this指向问题(call、apply、blind),自我理解的
- 【转】kubernetes 中 deployment 支持哪些键值
- 如何写python程序
- ES Java REST Client 官方文档
- 296.deepin下载安装、root改密、cpu不降频、修改快捷键、创建启动器快捷方式、win文件访问、直接进win无deepin启动项...
- 开放电脑站点81端口
- (端到端多尺度去雾算法)FAMED-Net: A Fast and Accurate Multi-scale End-to-end Dehazing Network
- AMD CEO辞职令业内震惊:邓元鋆有点尴尬
- WC2016 挑战NPC
- 计算机科学与技术专业 ppt,计算机科学与技术专业.ppt
- Vue里的ElementUi点击行 如何获取 Table 的行索引
- Java哈希表及其应用