下面是编程之家 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俄罗斯方块实现代码分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/25264.html