admin 管理员组

文章数量: 1184232


2024年3月1日发(作者:smart五大原则案例)

package Game;

import ;

import ;

import cs;

import nt;

import tener;

import ;

import ;

import ;

import .*;

public class she extends JFrame{

MyPaint mp=null;

public static void main(String[] args) {

she she=new she();

}

public she(){

mp=new MyPaint();

Thread t1=new Thread(mp);//启动mp线程

();

(mp);//加载面板

Listener(mp);//加载按键监听

e(300,320);//窗口大小

ationRelativeTo(null); //居中

le("贪吃蛇V1.0");

aultCloseOperation(_ON_CLOSE);//点击关闭时,关闭程序

ible(true);//可见

}

}

class MyPaint extends JPanel implements KeyListener,Runnable{

yidong yd=new yidong();

public void paint (Graphics g){

(g);

or();

ct(0, 0, 300, 260);

or();

al(, , 20, 20);

or();

al(yd.x[0], yd.y[0], 20, 20);//蛇头显示

or();

for(int i=1;i<-1;i++){//蛇身体显示

al(yd.x[i], yd.y[i], 20, 20);

}

ring("当前分数: "+, 190, 275);

ring("速度等级: "+, 10, 275);

or();

if(==0){ //当游戏结束时显示

t(new Font("黑体",1,20));

ring("Game over", 90, 100);

t(new Font("幼体",1,15));

ring("按Z键 继续游戏!", 80, 120);

}

}

public void keyPressed(KeyEvent e) {

if(==1){//当游戏进行时 可控制

if(Code()==_UP){

if(!=2){=8;}

}else if(Code()==_DOWN){

if(!=8){=2;}

}else if(Code()==_LEFT){

if(!=6){=4;}

}else if(Code()==_RIGHT){

if(!=4){=6;}

}

}else{//当游戏结束时 按Z 恢复游戏

if(Code()==_Z){

=4;

yd.x[0]=100;yd.y[0]=100;yd.x[1]=80;yd.y[1]=100;yd.x[2]=60;yd.y[2]=100;

=200;=1;=6;=6;=20;

}

}

}

public void keyReleased(KeyEvent arg0) {}

public void keyTyped(KeyEvent arg0) {}

public void run() { //刷新面板线程

Thread t2=new Thread(yd);

();

while(true){

try {(10);}

catch (InterruptedException e) {tackTrace();}

t();

}

}

}

class yidong implements Runnable{ //蛇移动线程

int maxsum=128,sum=4,x[]=new int[maxsum],y[]=new int[maxsum],kaishi=1;

//sum:代表蛇的总共长度是sum-1

int fx=1,nfx,sp=20,i=0,yanchi=200,fenshu;//方向 fx :4=← 6=→

8=↑ 2=↓ 其余:无移动

int swx=0,swy=0,shiwu=0;

String lv="1";

Random sj=new Random();

@Override

public void run() {

x[0]=100;y[0]=100;//初始化蛇坐标

while(true){

try {(yanchi);}

catch (InterruptedException e) {tackTrace();}

if(shiwu==0){//随机产生食物

swx=(t(10)+1)*20;

swy=(t(10)+1)*20;

shiwu=1; }

if(kaishi==1){fenshu=sum*100-400;}//分数计算

for(int i=sum-1;i>0;i--){//身体坐标刷新

x[i]=x[i-1];

y[i]=y[i-1];

}

if(fx==6&&nfx!=4){//方向判断

x[0]+=sp;//移动

nfx=6;

}else if(fx==4&&nfx!=6){x[0]-=sp;nfx=4;}

else if(fx==2&&nfx!=8){y[0]+=sp;nfx=2;}

else if(fx==8&&nfx!=2){y[0]-=sp;nfx=8;}

else{if(nfx==6){x[0]+=sp;}

if(nfx==4){x[0]-=sp;}

if(nfx==2){y[0]+=sp;}

if(nfx==8){y[0]-=sp;}}

if(x[0]>270){x[0]-=sp;}

if(x[0]<0){x[0]+=sp;}

if(y[0]>255){y[0]-=sp;}

if(y[0]<0){y[0]+=sp;}

if(x[0]>swx-5&&x[0]swy-5&&y[0]

sum++;//增加长度

shiwu=0;

if(sum==10){yanchi=180;lv="2";}//加速

if(sum==20){yanchi=160;lv="3";}

if(sum==30){yanchi=150;lv="4";}

if(sum==40){yanchi=140;lv="5";}

if(sum==50){yanchi=130;lv="max";}

}

for(int i=sum-1;i>0;i--){//判断蛇是否吃到自己

if(x[0]>x[i]-5&&x[0]y[i]-5&&y[0]

sp=0;

yanchi=500;

kaishi=0;

}

}

}

}

}


本文标签: 游戏 线程 显示 长度