導入Java . awt . color;
導入Java . awt . event . action event;
導入Java . awt . event . action listener;
導入Java . awt . event . key event;
導入Java . awt . event . key listener;
導入Java . awt . event . window adapter;
導入Java . awt . event . window event;
導入Java . io . buffered reader;
導入Java . io . file inputstream;
導入Java . io . file output stream;
導入Java . io . inputstreamreader;
導入javax . swing . image icon;
導入javax . swing . jframe;
導入javax . swing . jlabel;
導入javax . swing . jmenu;
導入javax . swing . jmenubar;
導入javax . swing . jmenuitem;
導入javax . swing . joptionpane;
導入javax . swing . jpanel;
公共類TanChiShe實現KeyListener、ActionListener{
/**
* @param args
*/
int max = 300//最大蛇形長度
final int JianJu = 15;//設置蛇的移動網格間距(最大窗口32*28網格)。
字節方想= 4;//控制蛇的移動方向,最初是向右。
int time = 500//蛇移動的間隔
int Jian time = 2;//吃減少的時間
int x,y;//根據網格計算出蛇移動的坐標。
int x2,y2;//暫時存儲蛇頭的坐標。
int jiFenQi = 0;//積分器
boolean isRuned = false//只有在未運行時才能設置級別。
boolean out = false//沒開始跑?
布爾run = false//暫停操作
String JiBie = " intermediate
JFrame f = new JFrame(" Snake v 1.0 ");
JPanel show = new JPanel();
JLabel Message = new JLabel("等級:中級蛇長:5次500ms分數:00 ");
//JButton play = new JButton(" start ");
JLabel sheTou
JLabel shiWu
JLabel sheWei[]= new JLabel[max];
靜態int diJi = 4;//蛇尾應該加哪個下標?
image icon Shang = new image icon(" tu pian \ \ isshetouup . png ");//生成四個蛇頭圖案。
image icon Xia = new image icon(" tu pian \ \ isshetoudown . png ");
image icon Zhuo = new image icon(" tu pian \ \ isshetouleft . png ");
image icon you = new image icon(" tu pian \ \ isshetouright . png ");
JMenuBar JMB = new JMenuBar();
JMenu file = new JMenu("開始遊戲");
JMenuItem play = new JMenuItem("開始遊戲");
JMenuItem pause = new JMenuItem("暫停遊戲");
JMenu hard = new JMenu(“遊戲難度”);
JMenuItem Gao = new JMenuItem(" advanced ");
JMenuItem zhong = new JMenuItem(" intermediate ");
JMenuItem di = new JMenuItem("低級");
JMenu about = new JMenu(" about ");
JMenuItem GF = new JMenuItem("※高分榜");
JMenuItem ZZ = new JMenuItem("關於作者");
JMenuItem YX = new JMenuItem("關於遊戲");
JMenuItem QK = new JMenuItem("空記錄");
靜態TanChiShe TCS = new TanChiShe();
公共靜態void main(String[] args) {
//TanChiShe TCS = new TanChiShe();
TCS . f();
}
公共void f(){
f.setBounds(250,100,515,530);
f.setLayout(空);
f . setalwaysontop(true);//窗口總是停留在最前面。
f.setBackground(新顏色(0,0,0));
f . setdefaultcloseoperation(0);
f . setresizable(false);
f . set visible(true);
// f.getContentPane()。setBackground(顏色。黑色);
f . addwindowlistener(new window adapter(){
public void window closing(window event e){
system . exit(0);//退出程序
}
});
f .塞吉梅努巴爾(JMB);
JMB.add(文件);
file.add(播放);
file.add(暫停);
JMB.add(硬);
hard.add(高);
hard.add(鐘);
hard . add(di);
JMB.add(關於);
about . add(GF);
gf . set foreground(color . blue);
about . add(ZZ);
about . add(YX);
about . add(QK);
qk . set foreground(color . red);
f.add(顯示);
show.setBounds(0,f.getHeight()-92,f.getWidth(),35);
//show . set background(color . green);
// f.add(播放);
// play.setBounds(240,240,80,25);
play . addactionlistener(this);
pause . addactionlistener(this);
Gao . addactionlistener(this);
zhong.addActionListener(本);
di . addactionlistener(this);
gf . addactionlistener(this);
ZZ . addactionlistener(this);
yx . addactionlistener(this);
qk . addactionlistener(this);
show.add(消息);
message . set foreground(color . blue);
f.addKeyListener(這個);
//show . addkey listener(this);
play.addKeyListener(這個);
sheChuShi();
}
Public void sheChuShi(){// snake初始化
sheTou = new JLabel(妳);//用右圖初始化蛇頭。
f.add(蛇頭);
sheTou.setBounds(JianJu*0,JianJu*0,JianJu,JianJu);
//system . out . println(" is here ");
shiWu = new JLabel(“■”);
f.add(十五);
shiwu . set bounds(10 *劍居,10 *劍居,劍居,劍居);
for(int I = 0;我& lt= diJii++) {
sheWei[I]= new JLabel(■);
f . add(sheWei[I]);
蛇尾[我]。set bounds(-1 *劍居,0 *劍居,劍居,劍居);
}
while(true){
if(out == true){
雲星();
打破;
}
嘗試{
thread . sleep(200);
}catch(Exception ex){
ex . printstacktrace();
}
}
}
Public void sheJiaChang(){//蛇的長度增加了。
if(diJi & lt;最大){
sheWei[++ diJi]= new JLabel(new image icon(" tuPian \ \ isshewei . jpg "));
f . add(sheWei[diJi]);
蛇尾[地極]。setBounds(sheWei[diJi-1]。getX(),sheWei[diJi-1]。getY()、JianJu、JianJu);
//system . out . println(" diJi "+diJi);
}
}
public void penghuanjiance(){//檢測蛇的碰撞。
if(shetou . getx()& lt;0 | | shetou . gety()& lt;0 ||
shetou . getx()& gt;f . getwidth()-15 | | shetou . gety()& gt;f.getHeight()-105 ){
game over();
//system . out . println(" game over ");
}
if(shetou . getx()= = shiwu . getx()& amp;& ampsheTou.getY() == shiWu.getY()){
out: while(true){
shiwu . set location((int)(math . random()* 32)* JianJu,(int)(math . random()* 28)* JianJu);
for(int I = 0;我& lt= diJii++){
if(shiWu.getX()!= sheWei[i]。getX()& amp;& ampshiWu.getY()!=sheWei[i]。getY()
& amp& ampsheTou.getX()!= shiwu . getx()& amp;& ampsheTou.getY()!= shiWu.getY()){//如果食物不在蛇上,退出循環,成功產生食物。
爆發;
}
}
}
佘家場();
//system . out . println(" ate one ");
如果(時間& gt100 ){
time-= Jian time;
}
else{}
message . settext(" Level:"+JiBie+" Snake Length:"+(diJi+2)+" Time:"+Time+" ms Score:"+(jiFenQi+= 10)+";
}
for(int I = 0;我& lt= diJii++){
if(sheTou.getX() == sheWei[i]。getX()& amp;& ampsheTou.getY() == sheWei[i]。getY()){
game over();
// System.out.println("吃尾");
}
}
}
public void yunXing(){
while(true){
while(運行){
If(方想== 1){//
y-= 1;
}
If(方想== 2){//
y+= 1;
}
If(方想== 3){// left
x-= 1;
}
If(方想== 4){//右
x+= 1;
}
x2 = shetou . getx();
y2 = shetou . gety();
sheTou.setLocation(x*JianJu,y * JianJu);//設置黑魚的網格數*間隔。
for(int I = diJi;我& gt=0;我- ){
if(i==0){
蛇尾[我]。setLocation(x2,y2);
//system . out . println(I+" "+shetou . getx()+" "+shetou . gety());
}
否則{
蛇尾[我]。setLocation(sheWei[i-1]。getX(),sheWei[i-1]。getY());
//system . out . println(I+" "+sheWei[I])。getX()+" "+sheWei[i]。getY());
}
}
pengzhuanjance();
嘗試{
thread . sleep(time);
}catch(異常e){
e . printstacktrace();
}
}
message . settext(" Level:"+JiBie+" Snake Length:"+(diJi+2)+" Time:"+Time+" ms Score:"+(jiFenQi+= 10)+";
嘗試{
thread . sleep(200);
}catch(異常e){
e . printstacktrace();
}
}
}
公共void gameOver(){//遊戲結束時處理。
Int in =選項窗格。ShowConfirmDiarog (f,“遊戲結束!\n是否要保存分數”,“提示”,JOptionPane。YES _ NO _ OPTION);
if(in == JOptionPane。是_選項){
//system . out . println(" YES ");
strings =選項窗格。ShowinputDialog (f,"輸入妳的名字:");
嘗試{
file inputstream fis = new file inputstream(" Gao fen . ini ");//先讀取前面的數據,再添加到寫入的數據中。
InputStreamReader isr =新的InputStreamReader(fis);
BufferedReader br =新buffered reader(ISR);
字符串s2,setOut =
while((s2=br.readLine())!= null){
setOut = setOut+S2+" \ n ";
}
file output stream fos = new file output stream(" Gao fen . ini ");//輸出到文件流
s = setOut+s+":"+jiFenQi+" \ n ";
fos . write(s . getbytes());
}catch(異常e){}
}
system . exit(0);
}
public void key typed(key event arg 0){
// TODO自動生成方法存根
}
公共void按鍵(KeyEvent arg0) {
//system . out . println(arg 0 . getsource());
If (arg0。getkeycode () = = keyevent。vk _ up){//按下上下方向的數值進行相應改變。
如果(方想!= 2){
方想= 1;
// sheTou.setIcon(尚);//設置蛇的方向
}
//system . out . println(" UP ");
}
if(arg0.getKeyCode() == KeyEvent。VK_DOWN){
如果(方想!= 1){
方想= 2;
//shetou . seticon(Xia);
}
//system . out . println(" DOWN ");
}
If (arg0。getkeycode () = = keyevent。vk _ left){//左右方向的值相應變化。
如果(方想!= 4){
方想= 3;
// sheTou.setIcon(卓);
}
//system . out . println(" LEFT ");
}
if(arg0.getKeyCode() == KeyEvent。VK _右){
如果(方想!= 3){
方想= 4;
// sheTou.setIcon(妳);
}
//system . out . println(" RIGHT ");
}
}
public void key released(key event arg 0){
// TODO自動生成方法存根
}
public void action performed(action event arg 0){
// TODO自動生成方法存根
JMenuItem JI =(JMenuItem)arg 0 . getsource();
if(JI == play){
out = true
run = true
isRuned = true
Gao . set enabled(false);
zhong . set enabled(false);
di . set enabled(false);
}
if(JI == pause){
run = false
}
if(is rund = = false){//){//只有在遊戲還沒有運行的情況下才能設置關卡。
如果(高)
時間= 200;
Jian time = 1;
JiBie = "高級";
message . settext(" Level:"+JiBie+" Snake Length:"+(diJi+2)+" Time:"+Time+" ms Score:"+jiFenQi);
}
if(JI == zhong){
時間= 400;
Jian time = 2;
JiBie = "中級";
message . settext(" Level:"+JiBie+" Snake Length:"+(diJi+2)+" Time:"+Time+" ms Score:"+jiFenQi);
}
if(JI == di){
時間= 500;
Jian time = 3;
JiBie = "低級";
message . settext(" Level:"+JiBie+" Snake Length:"+(diJi+2)+" Time:"+Time+" ms Score:"+jiFenQi);
}
}
if(JI == GF){
嘗試{
file inputstream fis = new file inputstream(" Gao fen . ini ");
InputStreamReader isr =新的InputStreamReader(fis);
BufferedReader br =新buffered reader(ISR);
字符串s,setOut =
while((s=br.readLine())!= null){
setOut = setOut+s+" \ n ";
}
if(setout . equals(" "){
Joptionpane。顯示消息對話框(f,“沒有記錄保存!”,“高分榜”,jooptionpane。信息_消息);
}
否則{
joptionpane . showmessagedialog(f,setOut);
}
}catch(異常e){
e . printstacktrace();
}
}
If(JI == ZZ){//關於作者
Joption窗格。顯示消息對話框(f,“軟件作者:沈\n地址:四川省綿陽市\ nqq:898513806 \ n郵箱:shenzhifeiok @ 126.com”,“關於作者”,Joption窗格。信息_。
}
If(JI == YX){//關於遊戲
Joption窗格。顯示消息對話框(f,“貪吃蛇遊戲\ n遊戲版本V1.0”,“關於遊戲”,選項窗格。信息_消息);
}
如果(紀== QK){
嘗試{
Int Select =選項窗格。ShowConfirmDiarog (f,"您確定要清空記錄嗎?",“空記錄”,jooptionpane。yes _ option);
if(select == JOptionPane。是_選項){
String setOut =
file output stream fos = new file output stream(" Gao fen . ini ");//輸出到文件流
fos . write(setout . getbytes());
}
}catch(異常ex){}
}
}
}
//我自己寫的。本來裏面有圖片,但是我上傳不了,就把圖片去掉了,裏面的ImageIcon之類的句子也可以去掉。可以正常運行。