3个回答
展开全部
//package main;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class TanChiShe implements KeyListener,ActionListener{
/**
* @param args
*/
int max = 300;//蛇长最大值
final int JianJu = 15; //设定蛇的运动网格间距(窗口最大32*28格)
byte fangXiang = 4; //控制蛇的运动方向,初始为右
int time = 500; //蛇的运动间隔时间
int jianTime = 2;//吃一个减少的时间
int x,y;//蛇的运动坐标,按网格来算
int x2,y2;//暂存蛇头的坐标
int jiFenQi = 0;//积分器
boolean isRuned = false;//没运行才可设级别
boolean out = false;//没开始运行?
boolean run = false;//暂停运行
String JiBie = "中级";
JFrame f = new JFrame("贪吃蛇 V1.0");
JPanel show = new JPanel();
JLabel Message = new JLabel("级别:中级 蛇长:5 时间500ms 分数:00");
// JButton play = new JButton("开始");
JLabel sheTou;
JLabel shiWu;
JLabel sheWei[] = new JLabel[max];
static int diJi = 4; //第几个下标的蛇尾要被加上
ImageIcon shang = new ImageIcon("tuPian\\isSheTouUp.png");//产生四个上下左右的蛇头图案
ImageIcon xia = new ImageIcon("tuPian\\isSheTouDown.png");
ImageIcon zhuo = new ImageIcon("tuPian\\isSheTouLeft.png");
ImageIcon you = new ImageIcon("tuPian\\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("高级");
JMenuItem zhong = new JMenuItem("中级");
JMenuItem di = new JMenuItem("低级");
JMenu about = new JMenu(" 关于 ");
JMenuItem GF = new JMenuItem("※高分榜");
JMenuItem ZZ = new JMenuItem("关于作者");
JMenuItem YX = new JMenuItem("关于游戏");
JMenuItem QK = new JMenuItem("清空记录");
static TanChiShe tcs = new TanChiShe();
public static void main(String[] args) {
// TanChiShe tcs = new TanChiShe();
tcs.f();
}
public void f(){
f.setBounds(250,100,515,530);
f.setLayout(null);
f.setAlwaysOnTop(true);//窗口始终保持最前面
f.setBackground(new Color(0,0,0));
f.setDefaultCloseOperation(0);
f.setResizable(false);
f.setVisible(true);
// f.getContentPane().setBackground(Color.BLACK);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);//退出程序
}
});
f.setJMenuBar(JMB);
JMB.add(file);
file.add(play);
file.add(pause);
JMB.add(hard);
hard.add(gao);
hard.add(zhong);
hard.add(di);
JMB.add(about);
about.add(GF);
GF.setForeground(Color.blue);
about.add(ZZ);
about.add(YX);
about.add(QK);
QK.setForeground(Color.red);
f.add(show);
show.setBounds(0,f.getHeight()-92,f.getWidth(),35);
// show.setBackground(Color.green);
// f.add(play);
// play.setBounds(240,240,80,25);
play.addActionListener(this);
pause.addActionListener(this);
gao.addActionListener(this);
zhong.addActionListener(this);
di.addActionListener(this);
GF.addActionListener(this);
ZZ.addActionListener(this);
YX.addActionListener(this);
QK.addActionListener(this);
show.add(Message);
Message.setForeground(Color.blue);
f.addKeyListener(this);
// show.addKeyListener(this);
play.addKeyListener(this);
sheChuShi();
}
public void sheChuShi(){//蛇初始化
sheTou = new JLabel(you);//用向右的图来初始蛇头
f.add(sheTou);
sheTou.setBounds(JianJu*0,JianJu*0,JianJu,JianJu);
// System.out.println("ishere");
shiWu = new JLabel("■");
f.add(shiWu);
shiWu.setBounds(10*JianJu,10*JianJu,JianJu,JianJu);
for(int i=0;i<=diJi;i++) {
sheWei[i] = new JLabel("■");
f.add(sheWei[i]);
sheWei[i].setBounds(-1*JianJu,0*JianJu,JianJu,JianJu);
}
while(true){
if(out == true){
yunXing();
break;
}
try{
Thread.sleep(200);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public void sheJiaChang(){//蛇的长度增加
if(diJi < max){
sheWei[++diJi] = new JLabel(new ImageIcon("tuPian\\isSheWei.jpg"));
f.add(sheWei[diJi]);
sheWei[diJi].setBounds(sheWei[diJi-1].getX(),sheWei[diJi-1].getY(),JianJu,JianJu);
// System.out.println("diJi "+diJi);
}
}
public void pengZhuanJianCe(){//检测蛇的碰撞情况
if(sheTou.getX()<0 || sheTou.getY()<0 ||
sheTou.getX()>f.getWidth()-15 || sheTou.getY()>f.getHeight()-105 ){
gameOver();
// System.out.println("GameOVER");
}
if(sheTou.getX() == shiWu.getX() && sheTou.getY() == shiWu.getY()){
out: while(true){
shiWu.setLocation((int)(Math.random()*32)*JianJu,(int)(Math.random()*28)*JianJu);
for(int i=0;i<=diJi;i++){
if(shiWu.getX()!= sheWei[i].getX() && shiWu.getY()!=sheWei[i].getY()
&& sheTou.getX()!=shiWu.getX() && sheTou.getY()!= shiWu.getY()){//如果食物不在蛇身上则退出循环,产生食物成功
break out;
}
}
}
sheJiaChang();
// System.out.println("吃了一个");
if(time>100 ){
time -= jianTime;
}
else{}
Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+" 时间:"+time+"ms 分数:"+(jiFenQi+=10)+"");
}
for(int i=0;i<=diJi;i++){
if(sheTou.getX() == sheWei[i].getX() && sheTou.getY() == sheWei[i].getY()){
gameOver();
// System.out.println("吃到尾巴了");
}
}
}
public void yunXing(){
while(true){
while(run){
if(fangXiang == 1){//上
y-=1;
}
if(fangXiang == 2){//下
y+=1;
}
if(fangXiang == 3){//左
x-=1;
}
if(fangXiang == 4){//右
x+=1;
}
x2 = sheTou.getX();
y2 = sheTou.getY();
sheTou.setLocation(x*JianJu,y*JianJu); //设置蛇头的坐标 网格数*间隔
for(int i=diJi;i>=0;i--){
if(i==0){
sheWei[i].setLocation(x2,y2);
// System.out.println(i+" "+sheTou.getX()+" "+sheTou.getY());
}
else{
sheWei[i].setLocation(sheWei[i-1].getX(),sheWei[i-1].getY());
// System.out.println(i+" "+sheWei[i].getX()+" "+sheWei[i].getY());
}
}
pengZhuanJianCe();
try{
Thread.sleep(time);
}catch(Exception e){
e.printStackTrace();
}
}
Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+" 时间:"+time+"ms 分数:"+(jiFenQi+=10)+"");
try{
Thread.sleep(200);
}catch(Exception e){
e.printStackTrace();
}
}
}
public void gameOver(){//游戏结束时处理
int in = JOptionPane.showConfirmDialog(f,"游戏已经结束!\n是否要保存分数","提示",JOptionPane.YES_NO_OPTION);
if(in == JOptionPane.YES_OPTION){
// System.out.println("YES");
String s = JOptionPane.showInputDialog(f,"输入你的名字:");
try{
FileInputStream fis = new FileInputStream("GaoFen.ini");//先把以前的数据读出来加到写的数据前
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String s2,setOut = "";
while((s2=br.readLine())!= null){
setOut =setOut+s2+"\n";
}
FileOutputStream fos = new FileOutputStream("GaoFen.ini");//输出到文件流
s = setOut+s+":"+jiFenQi+"\n";
fos.write(s.getBytes());
}catch(Exception e){}
}
System.exit(0);
}
public void keyTyped(KeyEvent arg0) {
// TODO 自动生成方法存根
}
public void keyPressed(KeyEvent arg0) {
// System.out.println(arg0.getSource());
if(arg0.getKeyCode() == KeyEvent.VK_UP){//按上下时方向的值相应改变
if(fangXiang != 2){
fangXiang = 1;
// sheTou.setIcon(shang);//设置蛇的方向
}
// System.out.println("UP");
}
if(arg0.getKeyCode() == KeyEvent.VK_DOWN){
if(fangXiang != 1){
fangXiang = 2;
// sheTou.setIcon(xia);
}
// System.out.println("DOWN");
}
if(arg0.getKeyCode() == KeyEvent.VK_LEFT){//按左右时方向的值相应改变
if(fangXiang != 4){
fangXiang = 3;
// sheTou.setIcon(zhuo);
}
// System.out.println("LEFT");
}
if(arg0.getKeyCode() == KeyEvent.VK_RIGHT){
if(fangXiang != 3){
fangXiang = 4;
// sheTou.setIcon(you);
}
// System.out.println("RIGHT");
}
}
public void keyReleased(KeyEvent arg0) {
// TODO 自动生成方法存根
}
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
JMenuItem JI = (JMenuItem)arg0.getSource();
if(JI == play){
out = true;
run = true;
isRuned = true;
gao.setEnabled(false);
zhong.setEnabled(false);
di.setEnabled(false);
}
if(JI == pause){
run = false;
}
if(isRuned == false){//如果游戏还没运行,才可以设置级别
if(JI == gao){
time = 200;
jianTime = 1;
JiBie = "高级";
Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+" 时间:"+time+"ms 分数:"+jiFenQi);
}
if(JI == zhong){
time = 400;
jianTime = 2;
JiBie = "中级";
Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+" 时间:"+time+"ms 分数:"+jiFenQi);
}
if(JI == di){
time = 500;
jianTime = 3;
JiBie = "低级";
Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+" 时间:"+time+"ms 分数:"+jiFenQi);
}
}
if(JI == GF){
try{
FileInputStream fis = new FileInputStream("GaoFen.ini");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String s,setOut = "";
while((s=br.readLine())!= null){
setOut =setOut+s+"\n";
}
if(setOut.equals("")){
JOptionPane.showMessageDialog(f,"暂无保存记录!","高分榜",JOptionPane.INFORMATION_MESSAGE);
}
else{
JOptionPane.showMessageDialog(f,setOut);
}
}catch(Exception e){
e.printStackTrace();
}
}
if(JI == ZZ){//关于作者
JOptionPane.showMessageDialog(f,"软件作者:申志飞\n地址:四川省绵阳市\nQQ:898513806\nE-mail:shenzhifeiok@126.com","关于作者",JOptionPane.INFORMATION_MESSAGE);
}
if(JI == YX){//关于游戏
JOptionPane.showMessageDialog(f,"贪吃蛇游戏\n游戏版本 V1.0","关于游戏",JOptionPane.INFORMATION_MESSAGE);
}
if(JI == QK){
try{
int select = JOptionPane.showConfirmDialog(f,"确实要清空记录吗?","清空记录",JOptionPane.YES_OPTION);
if(select == JOptionPane.YES_OPTION){
String setOut = "";
FileOutputStream fos = new FileOutputStream("GaoFen.ini");//输出到文件流
fos.write(setOut.getBytes());
}
}catch(Exception ex){}
}
}
}
//是我自己写的,本来里面有图片的,但无法上传,所以把图片去掉了,里面的ImageIcon等语句可以去掉。能正常运行。
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class TanChiShe implements KeyListener,ActionListener{
/**
* @param args
*/
int max = 300;//蛇长最大值
final int JianJu = 15; //设定蛇的运动网格间距(窗口最大32*28格)
byte fangXiang = 4; //控制蛇的运动方向,初始为右
int time = 500; //蛇的运动间隔时间
int jianTime = 2;//吃一个减少的时间
int x,y;//蛇的运动坐标,按网格来算
int x2,y2;//暂存蛇头的坐标
int jiFenQi = 0;//积分器
boolean isRuned = false;//没运行才可设级别
boolean out = false;//没开始运行?
boolean run = false;//暂停运行
String JiBie = "中级";
JFrame f = new JFrame("贪吃蛇 V1.0");
JPanel show = new JPanel();
JLabel Message = new JLabel("级别:中级 蛇长:5 时间500ms 分数:00");
// JButton play = new JButton("开始");
JLabel sheTou;
JLabel shiWu;
JLabel sheWei[] = new JLabel[max];
static int diJi = 4; //第几个下标的蛇尾要被加上
ImageIcon shang = new ImageIcon("tuPian\\isSheTouUp.png");//产生四个上下左右的蛇头图案
ImageIcon xia = new ImageIcon("tuPian\\isSheTouDown.png");
ImageIcon zhuo = new ImageIcon("tuPian\\isSheTouLeft.png");
ImageIcon you = new ImageIcon("tuPian\\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("高级");
JMenuItem zhong = new JMenuItem("中级");
JMenuItem di = new JMenuItem("低级");
JMenu about = new JMenu(" 关于 ");
JMenuItem GF = new JMenuItem("※高分榜");
JMenuItem ZZ = new JMenuItem("关于作者");
JMenuItem YX = new JMenuItem("关于游戏");
JMenuItem QK = new JMenuItem("清空记录");
static TanChiShe tcs = new TanChiShe();
public static void main(String[] args) {
// TanChiShe tcs = new TanChiShe();
tcs.f();
}
public void f(){
f.setBounds(250,100,515,530);
f.setLayout(null);
f.setAlwaysOnTop(true);//窗口始终保持最前面
f.setBackground(new Color(0,0,0));
f.setDefaultCloseOperation(0);
f.setResizable(false);
f.setVisible(true);
// f.getContentPane().setBackground(Color.BLACK);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);//退出程序
}
});
f.setJMenuBar(JMB);
JMB.add(file);
file.add(play);
file.add(pause);
JMB.add(hard);
hard.add(gao);
hard.add(zhong);
hard.add(di);
JMB.add(about);
about.add(GF);
GF.setForeground(Color.blue);
about.add(ZZ);
about.add(YX);
about.add(QK);
QK.setForeground(Color.red);
f.add(show);
show.setBounds(0,f.getHeight()-92,f.getWidth(),35);
// show.setBackground(Color.green);
// f.add(play);
// play.setBounds(240,240,80,25);
play.addActionListener(this);
pause.addActionListener(this);
gao.addActionListener(this);
zhong.addActionListener(this);
di.addActionListener(this);
GF.addActionListener(this);
ZZ.addActionListener(this);
YX.addActionListener(this);
QK.addActionListener(this);
show.add(Message);
Message.setForeground(Color.blue);
f.addKeyListener(this);
// show.addKeyListener(this);
play.addKeyListener(this);
sheChuShi();
}
public void sheChuShi(){//蛇初始化
sheTou = new JLabel(you);//用向右的图来初始蛇头
f.add(sheTou);
sheTou.setBounds(JianJu*0,JianJu*0,JianJu,JianJu);
// System.out.println("ishere");
shiWu = new JLabel("■");
f.add(shiWu);
shiWu.setBounds(10*JianJu,10*JianJu,JianJu,JianJu);
for(int i=0;i<=diJi;i++) {
sheWei[i] = new JLabel("■");
f.add(sheWei[i]);
sheWei[i].setBounds(-1*JianJu,0*JianJu,JianJu,JianJu);
}
while(true){
if(out == true){
yunXing();
break;
}
try{
Thread.sleep(200);
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public void sheJiaChang(){//蛇的长度增加
if(diJi < max){
sheWei[++diJi] = new JLabel(new ImageIcon("tuPian\\isSheWei.jpg"));
f.add(sheWei[diJi]);
sheWei[diJi].setBounds(sheWei[diJi-1].getX(),sheWei[diJi-1].getY(),JianJu,JianJu);
// System.out.println("diJi "+diJi);
}
}
public void pengZhuanJianCe(){//检测蛇的碰撞情况
if(sheTou.getX()<0 || sheTou.getY()<0 ||
sheTou.getX()>f.getWidth()-15 || sheTou.getY()>f.getHeight()-105 ){
gameOver();
// System.out.println("GameOVER");
}
if(sheTou.getX() == shiWu.getX() && sheTou.getY() == shiWu.getY()){
out: while(true){
shiWu.setLocation((int)(Math.random()*32)*JianJu,(int)(Math.random()*28)*JianJu);
for(int i=0;i<=diJi;i++){
if(shiWu.getX()!= sheWei[i].getX() && shiWu.getY()!=sheWei[i].getY()
&& sheTou.getX()!=shiWu.getX() && sheTou.getY()!= shiWu.getY()){//如果食物不在蛇身上则退出循环,产生食物成功
break out;
}
}
}
sheJiaChang();
// System.out.println("吃了一个");
if(time>100 ){
time -= jianTime;
}
else{}
Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+" 时间:"+time+"ms 分数:"+(jiFenQi+=10)+"");
}
for(int i=0;i<=diJi;i++){
if(sheTou.getX() == sheWei[i].getX() && sheTou.getY() == sheWei[i].getY()){
gameOver();
// System.out.println("吃到尾巴了");
}
}
}
public void yunXing(){
while(true){
while(run){
if(fangXiang == 1){//上
y-=1;
}
if(fangXiang == 2){//下
y+=1;
}
if(fangXiang == 3){//左
x-=1;
}
if(fangXiang == 4){//右
x+=1;
}
x2 = sheTou.getX();
y2 = sheTou.getY();
sheTou.setLocation(x*JianJu,y*JianJu); //设置蛇头的坐标 网格数*间隔
for(int i=diJi;i>=0;i--){
if(i==0){
sheWei[i].setLocation(x2,y2);
// System.out.println(i+" "+sheTou.getX()+" "+sheTou.getY());
}
else{
sheWei[i].setLocation(sheWei[i-1].getX(),sheWei[i-1].getY());
// System.out.println(i+" "+sheWei[i].getX()+" "+sheWei[i].getY());
}
}
pengZhuanJianCe();
try{
Thread.sleep(time);
}catch(Exception e){
e.printStackTrace();
}
}
Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+" 时间:"+time+"ms 分数:"+(jiFenQi+=10)+"");
try{
Thread.sleep(200);
}catch(Exception e){
e.printStackTrace();
}
}
}
public void gameOver(){//游戏结束时处理
int in = JOptionPane.showConfirmDialog(f,"游戏已经结束!\n是否要保存分数","提示",JOptionPane.YES_NO_OPTION);
if(in == JOptionPane.YES_OPTION){
// System.out.println("YES");
String s = JOptionPane.showInputDialog(f,"输入你的名字:");
try{
FileInputStream fis = new FileInputStream("GaoFen.ini");//先把以前的数据读出来加到写的数据前
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String s2,setOut = "";
while((s2=br.readLine())!= null){
setOut =setOut+s2+"\n";
}
FileOutputStream fos = new FileOutputStream("GaoFen.ini");//输出到文件流
s = setOut+s+":"+jiFenQi+"\n";
fos.write(s.getBytes());
}catch(Exception e){}
}
System.exit(0);
}
public void keyTyped(KeyEvent arg0) {
// TODO 自动生成方法存根
}
public void keyPressed(KeyEvent arg0) {
// System.out.println(arg0.getSource());
if(arg0.getKeyCode() == KeyEvent.VK_UP){//按上下时方向的值相应改变
if(fangXiang != 2){
fangXiang = 1;
// sheTou.setIcon(shang);//设置蛇的方向
}
// System.out.println("UP");
}
if(arg0.getKeyCode() == KeyEvent.VK_DOWN){
if(fangXiang != 1){
fangXiang = 2;
// sheTou.setIcon(xia);
}
// System.out.println("DOWN");
}
if(arg0.getKeyCode() == KeyEvent.VK_LEFT){//按左右时方向的值相应改变
if(fangXiang != 4){
fangXiang = 3;
// sheTou.setIcon(zhuo);
}
// System.out.println("LEFT");
}
if(arg0.getKeyCode() == KeyEvent.VK_RIGHT){
if(fangXiang != 3){
fangXiang = 4;
// sheTou.setIcon(you);
}
// System.out.println("RIGHT");
}
}
public void keyReleased(KeyEvent arg0) {
// TODO 自动生成方法存根
}
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
JMenuItem JI = (JMenuItem)arg0.getSource();
if(JI == play){
out = true;
run = true;
isRuned = true;
gao.setEnabled(false);
zhong.setEnabled(false);
di.setEnabled(false);
}
if(JI == pause){
run = false;
}
if(isRuned == false){//如果游戏还没运行,才可以设置级别
if(JI == gao){
time = 200;
jianTime = 1;
JiBie = "高级";
Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+" 时间:"+time+"ms 分数:"+jiFenQi);
}
if(JI == zhong){
time = 400;
jianTime = 2;
JiBie = "中级";
Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+" 时间:"+time+"ms 分数:"+jiFenQi);
}
if(JI == di){
time = 500;
jianTime = 3;
JiBie = "低级";
Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+" 时间:"+time+"ms 分数:"+jiFenQi);
}
}
if(JI == GF){
try{
FileInputStream fis = new FileInputStream("GaoFen.ini");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String s,setOut = "";
while((s=br.readLine())!= null){
setOut =setOut+s+"\n";
}
if(setOut.equals("")){
JOptionPane.showMessageDialog(f,"暂无保存记录!","高分榜",JOptionPane.INFORMATION_MESSAGE);
}
else{
JOptionPane.showMessageDialog(f,setOut);
}
}catch(Exception e){
e.printStackTrace();
}
}
if(JI == ZZ){//关于作者
JOptionPane.showMessageDialog(f,"软件作者:申志飞\n地址:四川省绵阳市\nQQ:898513806\nE-mail:shenzhifeiok@126.com","关于作者",JOptionPane.INFORMATION_MESSAGE);
}
if(JI == YX){//关于游戏
JOptionPane.showMessageDialog(f,"贪吃蛇游戏\n游戏版本 V1.0","关于游戏",JOptionPane.INFORMATION_MESSAGE);
}
if(JI == QK){
try{
int select = JOptionPane.showConfirmDialog(f,"确实要清空记录吗?","清空记录",JOptionPane.YES_OPTION);
if(select == JOptionPane.YES_OPTION){
String setOut = "";
FileOutputStream fos = new FileOutputStream("GaoFen.ini");//输出到文件流
fos.write(setOut.getBytes());
}
}catch(Exception ex){}
}
}
}
//是我自己写的,本来里面有图片的,但无法上传,所以把图片去掉了,里面的ImageIcon等语句可以去掉。能正常运行。
展开全部
J2ME的
package snake;
import java.util.*;
import javax.microedition.lcdui.*;
public class SnakeCanvas extends Canvas implements Runnable{
/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/
int[][] snake = new int[200][2];
/**已经使用的节点数量*/
int snakeNum;
/**贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/
int direction;
/*移动方向*/
/**向上*/
private final int DIRECTION_UP = 0;
/**向下*/
private final int DIRECTION_DOWN = 1;
/**向左*/
private final int DIRECTION_LEFT = 2;
/**向右*/
private final int DIRECTION_RIGHT = 3;
/**游戏区域宽度*/
int width;
/**游戏区域高度*/
int height;
/**蛇身单元宽度*/
private final byte SNAKEWIDTH = 4;
/**是否处于暂停状态,true代表暂停*/
boolean isPaused = false;
/**是否处于运行状态,true代表运行*/
boolean isRun = true;
/**时间间隔*/
private final int SLEEP_TIME = 300;
/**食物的X坐标*/
int foodX;
/**食物的Y坐标*/
int foodY;
/**食物的闪烁控制*/
boolean b = true;
/**Random对象*/
Random random = new Random();
public SnakeCanvas() {
//初始化
init();
width = this.getWidth();
height = this.getHeight();
//启动线程
new Thread(this).start();
}
/**
* 初始化开始数据
*/
private void init(){
//初始化节点数量
snakeNum = 7;
//初始化节点数据
for(int i = 0;i < snakeNum;i++){
snake[i][0] = 100 - SNAKEWIDTH * i;
snake[i][1] = 40;
}
//初始化移动方向
direction = DIRECTION_RIGHT;
//初始化食物坐标
foodX = 100;
foodY = 100;
}
protected void paint(Graphics g) {
//清屏
g.setColor(0xffffff);
g.fillRect(0,0,width,height);
g.setColor(0);
//绘制蛇身
for(int i = 0;i < snakeNum;i++){
g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);
}
//绘制食物
if(b){
g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);
}
}
private void move(int direction){
//蛇身移动
for(int i = snakeNum - 1;i > 0;i--){
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
//第一个单元格移动
switch(direction){
case DIRECTION_UP:
snake[0][1] = snake[0][1] - SNAKEWIDTH;
break;
case DIRECTION_DOWN:
snake[0][1] = snake[0][1] + SNAKEWIDTH;
break;
case DIRECTION_LEFT:
snake[0][0] = snake[0][0] - SNAKEWIDTH;
break;
case DIRECTION_RIGHT:
snake[0][0] = snake[0][0] + SNAKEWIDTH;
break;
}
}
/**
* 吃掉食物,自身增长
*/
private void eatFood(){
//判别蛇头是否和食物重叠
if(snake[0][0] == foodX && snake[0][1] == foodY){
snakeNum++;
generateFood();
}
}
/**
* 产生食物
* 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合
*/
private void generateFood(){
while(true){
foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
boolean b = true;
for(int i = 0;i < snakeNum;i++){
if(foodX == snake[i][0] && snake[i][1] == foodY){
b = false;
break;
}
}
if(b){
break;
}
}
}
/**
* 判断游戏是否结束
* 结束条件:
* 1、蛇头超出边界
* 2、蛇头碰到自身
*/
private boolean isGameOver(){
//边界判别
if(snake[0][0] < 0 || snake[0][0] > (width - SNAKEWIDTH) ||
snake[0][1] < 0 || snake[0][1] > (height - SNAKEWIDTH)){
return true;
}
//碰到自身
for(int i = 4;i < snakeNum;i++){
if(snake[0][0] == snake[i][0]
&& snake[0][1] == snake[i][1]){
return true;
}
}
return false;
}
/**
* 事件处理
*/
public void keyPressed(int keyCode){
int action = this.getGameAction(keyCode);
//改变方向
switch(action){
case UP:
if(direction != DIRECTION_DOWN){
direction = DIRECTION_UP;
}
break;
case DOWN:
if(direction != DIRECTION_UP){
direction = DIRECTION_DOWN;
}
break;
case LEFT:
if(direction != DIRECTION_RIGHT){
direction = DIRECTION_LEFT;
}
break;
case RIGHT:
if(direction != DIRECTION_LEFT){
direction = DIRECTION_RIGHT;
}
break;
case FIRE:
//暂停和继续
isPaused = !isPaused;
break;
}
}
/**
* 线程方法
* 使用精确延时
*/
public void run(){
try{
while (isRun) {
//开始时间
long start = System.currentTimeMillis();
if(!isPaused){
//吃食物
eatFood();
//移动
move(direction);
//结束游戏
if(isGameOver()){
break;
}
//控制闪烁
b = !b;
}
//重新绘制
repaint();
long end = System.currentTimeMillis();
//延时
if(end - start < SLEEP_TIME){
Thread.sleep(SLEEP_TIME - (end - start));
}
}
}catch(Exception e){}
}
}
package snake;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class SnakeMIDlet extends MIDlet {
SnakeCanvas displayable = new SnakeCanvas();
public SnakeMIDlet() {
Display.getDisplay(this).setCurrent(displayable);
}
public void startApp() {}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
}
package snake;
import java.util.*;
import javax.microedition.lcdui.*;
public class SnakeCanvas extends Canvas implements Runnable{
/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/
int[][] snake = new int[200][2];
/**已经使用的节点数量*/
int snakeNum;
/**贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/
int direction;
/*移动方向*/
/**向上*/
private final int DIRECTION_UP = 0;
/**向下*/
private final int DIRECTION_DOWN = 1;
/**向左*/
private final int DIRECTION_LEFT = 2;
/**向右*/
private final int DIRECTION_RIGHT = 3;
/**游戏区域宽度*/
int width;
/**游戏区域高度*/
int height;
/**蛇身单元宽度*/
private final byte SNAKEWIDTH = 4;
/**是否处于暂停状态,true代表暂停*/
boolean isPaused = false;
/**是否处于运行状态,true代表运行*/
boolean isRun = true;
/**时间间隔*/
private final int SLEEP_TIME = 300;
/**食物的X坐标*/
int foodX;
/**食物的Y坐标*/
int foodY;
/**食物的闪烁控制*/
boolean b = true;
/**Random对象*/
Random random = new Random();
public SnakeCanvas() {
//初始化
init();
width = this.getWidth();
height = this.getHeight();
//启动线程
new Thread(this).start();
}
/**
* 初始化开始数据
*/
private void init(){
//初始化节点数量
snakeNum = 7;
//初始化节点数据
for(int i = 0;i < snakeNum;i++){
snake[i][0] = 100 - SNAKEWIDTH * i;
snake[i][1] = 40;
}
//初始化移动方向
direction = DIRECTION_RIGHT;
//初始化食物坐标
foodX = 100;
foodY = 100;
}
protected void paint(Graphics g) {
//清屏
g.setColor(0xffffff);
g.fillRect(0,0,width,height);
g.setColor(0);
//绘制蛇身
for(int i = 0;i < snakeNum;i++){
g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);
}
//绘制食物
if(b){
g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);
}
}
private void move(int direction){
//蛇身移动
for(int i = snakeNum - 1;i > 0;i--){
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
//第一个单元格移动
switch(direction){
case DIRECTION_UP:
snake[0][1] = snake[0][1] - SNAKEWIDTH;
break;
case DIRECTION_DOWN:
snake[0][1] = snake[0][1] + SNAKEWIDTH;
break;
case DIRECTION_LEFT:
snake[0][0] = snake[0][0] - SNAKEWIDTH;
break;
case DIRECTION_RIGHT:
snake[0][0] = snake[0][0] + SNAKEWIDTH;
break;
}
}
/**
* 吃掉食物,自身增长
*/
private void eatFood(){
//判别蛇头是否和食物重叠
if(snake[0][0] == foodX && snake[0][1] == foodY){
snakeNum++;
generateFood();
}
}
/**
* 产生食物
* 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合
*/
private void generateFood(){
while(true){
foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
boolean b = true;
for(int i = 0;i < snakeNum;i++){
if(foodX == snake[i][0] && snake[i][1] == foodY){
b = false;
break;
}
}
if(b){
break;
}
}
}
/**
* 判断游戏是否结束
* 结束条件:
* 1、蛇头超出边界
* 2、蛇头碰到自身
*/
private boolean isGameOver(){
//边界判别
if(snake[0][0] < 0 || snake[0][0] > (width - SNAKEWIDTH) ||
snake[0][1] < 0 || snake[0][1] > (height - SNAKEWIDTH)){
return true;
}
//碰到自身
for(int i = 4;i < snakeNum;i++){
if(snake[0][0] == snake[i][0]
&& snake[0][1] == snake[i][1]){
return true;
}
}
return false;
}
/**
* 事件处理
*/
public void keyPressed(int keyCode){
int action = this.getGameAction(keyCode);
//改变方向
switch(action){
case UP:
if(direction != DIRECTION_DOWN){
direction = DIRECTION_UP;
}
break;
case DOWN:
if(direction != DIRECTION_UP){
direction = DIRECTION_DOWN;
}
break;
case LEFT:
if(direction != DIRECTION_RIGHT){
direction = DIRECTION_LEFT;
}
break;
case RIGHT:
if(direction != DIRECTION_LEFT){
direction = DIRECTION_RIGHT;
}
break;
case FIRE:
//暂停和继续
isPaused = !isPaused;
break;
}
}
/**
* 线程方法
* 使用精确延时
*/
public void run(){
try{
while (isRun) {
//开始时间
long start = System.currentTimeMillis();
if(!isPaused){
//吃食物
eatFood();
//移动
move(direction);
//结束游戏
if(isGameOver()){
break;
}
//控制闪烁
b = !b;
}
//重新绘制
repaint();
long end = System.currentTimeMillis();
//延时
if(end - start < SLEEP_TIME){
Thread.sleep(SLEEP_TIME - (end - start));
}
}
}catch(Exception e){}
}
}
package snake;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class SnakeMIDlet extends MIDlet {
SnakeCanvas displayable = new SnakeCanvas();
public SnakeMIDlet() {
Display.getDisplay(this).setCurrent(displayable);
}
public void startApp() {}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
download.csdn.net上自己搜索并下载
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询