首页编程java编程java写出俄罗斯方块算什么水平(学了很久JAVA 不会写扫雷。俄罗斯方块)

java写出俄罗斯方块算什么水平(学了很久JAVA 不会写扫雷。俄罗斯方块)

编程之家2023-10-1280次浏览

大家好,关于java写出俄罗斯方块算什么水平很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于学了很久JAVA 不会写扫雷。俄罗斯方块的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

java写出俄罗斯方块算什么水平(学了很久JAVA 不会写扫雷。俄罗斯方块)

网络俄罗斯方块设计思想(JAVA)

俄罗斯方块的算法就不多说了

楼上

无尽的爱

java写出俄罗斯方块算什么水平(学了很久JAVA 不会写扫雷。俄罗斯方块)

都已经说的很清楚了

在楼上基础上再说一点

1可以时候其它非0的值

java写出俄罗斯方块算什么水平(学了很久JAVA 不会写扫雷。俄罗斯方块)

这样就可以代表具体的颜色

也就代表具体的方块类型

考虑简单一点双机对战

俄罗斯方块的算法就不多说了

楼上

无尽的爱

都已经说的很清楚了

在楼上基础上再说一点

1可以时候其它非0的值

这样就可以代表具体的颜色

也就代表具体的方块类型

考虑简单一点双机对战,不考虑网络延时

简单的回了

复杂的也就不难了

A作为主机,B作为附属机

以TCP作为连接协议,用UDP做要麻烦些

1、B发送连接请求,A回应连接请求

2、A随机选择一方为先开始,并把数据包发送给B,B发送回应消息

3、A发送开始消息给B,A发送完后就开始,B接受完后就开始,B不用回应消息,因为不考虑延时,而且是TCP

4、AB将本机中旋转、移动等动作发送给对方,对方不用回应,理由同上,对方机将这些动作显示出来

5、A或B失败后将消息发送给对方,之后双方结束游戏

这样的通讯,数据包就可以用非常简单的数值

在程序设计方面

可以划分为四个模块

1、己方方块显示

2、对方方块显示

3、网络模块

4、算法模块

总共三个线程

123个一线程

1和2都调用4进行操作

但运行完全独立

1接受键盘输入

并把相应的动作通过调用3中相应方法发送出去

3在接受到消息后调用2中的方法通知2

2再将结果显示出来

学了很久JAVA 不会写扫雷。俄罗斯方块

扫雷、俄罗斯方块这些小游戏不是为了开发游戏而开发,做这些项目只是为了巩固你学的java se这部分的知识。比如说,你做俄罗斯方块,你先得弄出个界面吧,这里就巩固的你awt或者swing上的知识了。等等。

做项目不是一下子上来想好了所有的细节才开始写的。你先把最先要写的写出来,比如得有界面,你就用awt或者swing上的知识做个界面,要做界面是不是要继承Frame这个类啊。窗口里面什么也没添加,先把窗口的大小,关闭等先写出来。

然后再想想,有了界面了,你得有界面里面的东西吧,比如一个方块,那么你就想想怎么样才能让窗口里面有个方块呢?是不是想到把它画出来啊,画出来那么就用到了paint方法,那你就看看这个方法具体是怎么用的,可以查百度或者api,查到paint方法是自动调用的,所以你只需要把它重写下就好。

....

做任何项目都是这样,一步一步写出来的,不是所有的细节你都考虑清楚了才开始写的。所以不要怕,慢慢写,等这个项目写完了,你就慢慢知道怎么开发一个项目了。

我们平时做开发也是先把最先能写好的写好,再慢慢填充后面想到的。

IO方面的知识很重要,你看见这两个字母就能想到它是关于写入和读出操作的,那么对什么写入读出呢,说白了就是对文件的写入和读出,明白了这个层面就开始对一个文件操作下,比如新建个文本文档,对里面写点内容,然后再读出来,打印,就用最底层的字节流就行了,凡是后面有stream的都是字节流,Reader和writer是字符流,字节流是一个字节一个字节读取的,字符流是一个字符一个字符读取,这个上的区别,你用中文测试下就明白了,因为中文的汉字是两个字节的,用字节流读出来是乱码。

至于后面的web方面的开发并没有想象中的那么难,搞开发就是这样的,得一步一步来,前面的没学明白,搞明白先,到了后面就会轻松很多。因为后面的知识学起来貌似比前面的java se简单。

对于这个项目的意义呢,除了帮助你们巩固以前的知识外,就是想拓宽点你的思路,要不然到后面做大项目,遇上问题就不会自己解决了,你在培训期间有老师给你们知道,出来到了公司上班,就只有网络和自己了,所以在做这个小项目的时候思路放开点,写代码认真点,以后你才能遇上任何问题都能解决。

我以前是学硬件的,刚开始学java se才学了一个星期,这一个星期我比你还痛苦,可是我每天都坚持敲代码,在第七天的时候我按照自己的思路就能做出这样的小游戏了。到后来我学java ee的时候就比别人快,现在在公司上班两年,开发速度也比别人快,代码的健壮性也比别人的好,为什么呢?原因只有一个,在我学习的时候,别人只有白天敲敲代码,我晚上还在敲,到了凌晨两点才睡觉,我写的多,遇上的问题比别人多,在开发上的经验就比别人多,在后面解决问题的时候,别人要试好几次才能弄出来,我直接写出来,都不用想。

最后,既然选择了开发,就一步一步学扎实,只要你静下心来,抱着解决问题的态度去做项目,没有你完不成的。

有什么问题,我愿意分享。祝春节愉快。

java的俄罗斯方块代码

俄罗斯方块——java源代码提供

import java.awt.*;

import java.awt.event.*;

//俄罗斯方块类

public class ERS_Block extends Frame{

public static boolean isPlay=false;

public static int level=1,score=0;

public static TextField scoreField,levelField;

public static MyTimer timer;

GameCanvas gameScr;

public static void main(String[] argus){

ERS_Block ers= new ERS_Block("俄罗斯方块游戏 V1.0 Author:Vincent");

WindowListener win_listener= new WinListener();

ers.addWindowListener(win_listener);

}

//俄罗斯方块类的构造方法

ERS_Block(String title){

super(title);

setSize(600,480);

setLayout(new GridLayout(1,2));

gameScr= new GameCanvas();

gameScr.addKeyListener(gameScr);

timer= new MyTimer(gameScr);

timer.setDaemon(true);

timer.start();

timer.suspend();

add(gameScr);

Panel rightScr= new Panel();

rightScr.setLayout(new GridLayout(2,1,0,30));

rightScr.setSize(120,500);

add(rightScr);

//右边信息窗体的布局

MyPanel infoScr= new MyPanel();

infoScr.setLayout(new GridLayout(4,1,0,5));

infoScr.setSize(120,300);

rightScr.add(infoScr);

//定义标签和初始值

Label scorep= new Label("分数:",Label.LEFT);

Label levelp= new Label("级数:",Label.LEFT);

scoreField= new TextField(8);

levelField= new TextField(8);

scoreField.setEditable(false);

levelField.setEditable(false);

infoScr.add(scorep);

infoScr.add(scoreField);

infoScr.add(levelp);

infoScr.add(levelField);

scorep.setSize(new Dimension(20,60));

scoreField.setSize(new Dimension(20,60));

levelp.setSize(new Dimension(20,60));

levelField.setSize(new Dimension(20,60));

scoreField.setText("0");

levelField.setText("1");

//右边控制按钮窗体的布局

MyPanel controlScr= new MyPanel();

controlScr.setLayout(new GridLayout(5,1,0,5));

rightScr.add(controlScr);

//定义按钮play

Button play_b= new Button("开始游戏");

play_b.setSize(new Dimension(50,200));

play_b.addActionListener(new Command(Command.button_play,gameScr));

//定义按钮Level UP

Button level_up_b= new Button("提高级数");

level_up_b.setSize(new Dimension(50,200));

level_up_b.addActionListener(new Command(Command.button_levelup,gameScr));

//定义按钮Level Down

Button level_down_b=new Button("降低级数");

level_down_b.setSize(new Dimension(50,200));

level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr));

//定义按钮Level Pause

Button pause_b=new Button("游戏暂停");

pause_b.setSize(new Dimension(50,200));

pause_b.addActionListener(new Command(Command.button_pause,gameScr));

//定义按钮Quit

Button quit_b= new Button("退出游戏");

quit_b.setSize(new Dimension(50,200));

quit_b.addActionListener(new Command(Command.button_quit,gameScr));

controlScr.add(play_b);

controlScr.add(level_up_b);

controlScr.add(level_down_b);

controlScr.add(pause_b);

controlScr.add(quit_b);

setVisible(true);

gameScr.requestFocus();

}

}

//重写MyPanel类,使Panel的四周留空间

class MyPanel extends Panel{

public Insets getInsets(){

return new Insets(30,50,30,50);

}

}

//游戏画布类

class GameCanvas extends Canvas implements KeyListener{

final int unitSize= 30;//小方块边长

int rowNum;//正方格的行数

int columnNum;//正方格的列数

int maxAllowRowNum;//允许有多少行未削

int blockInitRow;//新出现块的起始行坐标

int blockInitCol;//新出现块的起始列坐标

int [][] scrArr;//屏幕数组

Block b;//对方快的引用

//画布类的构造方法

GameCanvas(){

rowNum= 15;

columnNum= 10;

maxAllowRowNum= rowNum- 2;

b= new Block(this);

blockInitRow= rowNum- 1;

blockInitCol= columnNum/2- 2;

scrArr= new int [32][32];

}

//初始化屏幕,并将屏幕数组清零的方法

void initScr(){

for(int i=0;i<rowNum;i++)

for(int j=0; j<columnNum;j++)

scrArr[j]=0;

b.reset();

repaint();

}

//重新刷新画布方法

public void paint(Graphics g){

for(int i= 0; i< rowNum; i++)

for(int j= 0; j< columnNum; j++)

drawUnit(i,j,scrArr[j]);

}

//画方块的方法

public void drawUnit(int row,int col,int type){

scrArr[row][col]= type;

Graphics g= getGraphics();

tch(type){//表示画方快的方法

case 0: g.setColor(Color.black);break;//以背景为颜色画

case 1: g.setColor(Color.blue);break;//画正在下落的方块

case 2: g.setColor(Color.magenta);break;//画已经落下的方法

}

g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);

g.dispose();

}

public Block getBlock(){

return b;//返回block实例的引用

}

//返回屏幕数组中(row,col)位置的属性值

public int getScrArrXY(int row,int col){

if(row< 0|| row>= rowNum|| col< 0|| col>= columnNum)

return(-1);

else

return(scrArr[row][col]);

}

//返回新块的初始行坐标方法

public int getInitRow(){

return(blockInitRow);//返回新块的初始行坐标

}

//返回新块的初始列坐标方法

public int getInitCol(){

return(blockInitCol);//返回新块的初始列坐标

}

//满行删除方法

void deleteFullLine(){

int full_line_num= 0;

int k= 0;

for(int i=0;i<rowNum;i++){

boolean isfull= true;

L1:for(int j=0;j<columnNum;j++)

if(scrArr[j]== 0){

k++;

isfull= false;

break L1;

}

if(isfull) full_line_num++;

if(k!=0&& k-1!=i&&!isfull)

for(int j= 0; j< columnNum; j++){

if(scrArr[j]== 0)

drawUnit(k-1,j,0);

else

drawUnit(k-1,j,2);

scrArr[k-1][j]= scrArr[j];

}

}

for(int i= k-1;i< rowNum; i++){

for(int j= 0; j< columnNum; j++){

drawUnit(i,j,0);

scrArr[j]=0;

}

}

ERS_Block.score+= full_line_num;

ERS_Block.scoreField.setText(""+ERS_Block.score);

}

//判断游戏是否结束方法

boolean isGameEnd(){

for(int col= 0; col<columnNum; col++){

if(scrArr[maxAllowRowNum][col]!=0)

return true;

}

return false;

}

public void keyTyped(KeyEvent e){

}

public void keyReleased(KeyEvent e){

}

//处理键盘输入的方法

public void keyPressed(KeyEvent e){

if(!ERS_Block.isPlay)

return;

tch(e.getKeyCode()){

case KeyEvent.VK_DOWN:b.fallDown();break;

case KeyEvent.VK_LEFT:b.leftMove();break;

case KeyEvent.VK_RIGHT:b.rightMove();break;

case KeyEvent.VK_SPACE:b.leftTurn();break;

}

}

}

//处理控制类

class Command implements ActionListener{

static final int button_play= 1;//给按钮分配编号

static final int button_levelup= 2;

static final int button_leveldown= 3;

static final int button_quit= 4;

static final int button_pause= 5;

static boolean pause_resume= true;

int curButton;//当前按钮

GameCanvas scr;

//控制按钮类的构造方法

Command(int button,GameCanvas scr){

curButton= button;

this.scr=scr;

}

//按钮执行方法

public void actionPerformed(ActionEvent e){

tch(curButton){

case button_play:if(!ERS_Block.isPlay){

scr.initScr();

ERS_Block.isPlay= true;

ERS_Block.score= 0;

ERS_Block.scoreField.setText("0");

ERS_Block.timer.resume();

}

scr.requestFocus();

break;

case button_levelup:if(ERS_Block.level< 10){

ERS_Block.level++;

ERS_Block.levelField.setText(""+ERS_Block.level);

ERS_Block.score= 0;

ERS_Block.scoreField.setText(""+ERS_Block.score);

}

scr.requestFocus();

break;

case button_leveldown:if(ERS_Block.level> 1){

ERS_Block.level--;

ERS_Block.levelField.setText(""+ERS_Block.level);

ERS_Block.score= 0;

ERS_Block.scoreField.setText(""+ERS_Block.score);

}

scr.requestFocus();

break;

case button_pause:if(pause_resume){

ERS_Block.timer.suspend();

pause_resume= false;

}else{

ERS_Block.timer.resume();

pause_resume= true;

}

scr.requestFocus();

break;

case button_quit:System.exit(0);

}

}

}

//方块类

class Block{

static int[][] pattern={

{0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态

{0x04e0,0x0464,0x00e4,0x04c4},

{0x4620,0x6c00,0x4620,0x6c00},

{0x2640,0xc600,0x2640,0xc600},

{0x6220,0x1700,0x2230,0x0740},

{0x6440,0x0e20,0x44c0,0x8e00},

{0x0660,0x0660,0x0660,0x0660}

};

int blockType;//块的模式号(0-6)

int turnState;//块的翻转状态(0-3)

int blockState;//快的下落状态

int row,col;//块在画布上的坐标

GameCanvas scr;

//块类的构造方法

Block(GameCanvas scr){

this.scr= scr;

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

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

blockState= 1;

row= scr.getInitRow();

col= scr.getInitCol();

}

//重新初始化块,并显示新块

public void reset(){

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

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

blockState= 1;

row= scr.getInitRow();

col= scr.getInitCol();

dispBlock(1);

}

//实现“块”翻转的方法

public void leftTurn(){

if(assertValid(blockType,(turnState+ 1)%4,row,col)){

dispBlock(0);

turnState=(turnState+ 1)%4;

dispBlock(1);

}

}

//实现“块”的左移的方法

public void leftMove(){

if(assertValid(blockType,turnState,row,col-1)){

dispBlock(0);

col--;

dispBlock(1);

}

}

//实现块的右移

public void rightMove(){

if(assertValid(blockType,turnState,row,col+1)){

dispBlock(0);

col++;

dispBlock(1);

}

}

//实现块落下的操作的方法

public boolean fallDown(){

if(blockState== 2)

return(false);

if(assertValid(blockType,turnState,row-1,col)){

dispBlock(0);

row--;

dispBlock(1);

return(true);

}else{

blockState= 2;

dispBlock(2);

return(false);

}

}

//判断是否正确的方法

boolean assertValid(int t,int s,int row,int col){

int k= 0x8000;

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

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

if((int)(pattern[t][s]&k)!= 0){

int temp= scr.getScrArrXY(row-i,col+j);

if(temp<0||temp==2)

return false;

}

k= k>> 1;

}

}

return true;

}

//同步显示的方法

public synchronized void dispBlock(int s){

int k= 0x8000;

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

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

if(((int)pattern[blockType][turnState]&k)!= 0){

scr.drawUnit(row-i,col+j,s);

}

k=k>>1;

}

}

}

}

//定时线程

class MyTimer extends Thread{

GameCanvas scr;

public MyTimer(GameCanvas scr){

this.scr= scr;

}

public void run(){

while(true){

try{

sleep((10-ERS_Block.level+ 1)*100);

}

catch(InterruptedException e){}

if(!scr.getBlock().fallDown()){

scr.deleteFullLine();

if(scr.isGameEnd()){

ERS_Block.isPlay= false;

suspend();

}else

scr.getBlock().reset();

}

}

}

}

class WinListener extends WindowAdapter{

public void windowClosing(WindowEvent l){

System.exit(0);

}

}

关于本次java写出俄罗斯方块算什么水平和学了很久JAVA 不会写扫雷。俄罗斯方块的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

java永久带是什么(JAVA的主要应用领域是什么)学好java有什么技术要求,学java有什么要求吗