java程序设计俄罗斯方块_Java俄罗斯方块实现代码

java程序设计俄罗斯方块_Java俄罗斯方块实现代码下面是编程之家jb51.cc通过网络收集整理的代码片段。编程之家小编现在分享给大家,也给大家做个参考。packagecom.game;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjav…

下面是编程之家 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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注