导航:首页 > 编程语言 > 在java中怎么做贪吃蛇

在java中怎么做贪吃蛇

发布时间:2021-12-08 19:04:45

java如何写贪吃蛇游戏界面

这是一个最基本的界面,下面又不会的地方去查API

import java.awt.*;
import javax.swing.*;
public class View {
JFrame frame;
Container c;
JLabel backgound;
JButton start;
JLabel help;
public void first(){
frame=new JFrame("我的贪吃蛇");
c=frame.getContentPane();
c.setLayout(null);
Font f1=new Font("楷体",Font.BOLD,50);

backgound=new JLabel();
backgound.setBounds(0,0,800,600);
c.add(backgound);
backgound.setLayout(null);

start=new JButton();
start.setBounds(300,70,200,58);
start.setCursor(new Cursor(Cursor.HAND_CURSOR));
start.setBorder(null);
start.setContentAreaFilled(false);
backgound.add(start);
help = new JLabel();
help.setText("游戏帮助");
help.setBounds(180,230,500,50);
help.setForeground(Color.black);
help.setFont(f1);
backgound.add(help);
frame.setSize(800,600);
frame.setResizable(false);
frame.setVisible(true);
}

❷ java中的贪吃蛇程序

importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.util.*;
{
privateintstat=1,direction=0,bodylen=6,headx=7,heady=8,
tailx=1,taily=8,tail,foodx,foody,food;//初始化定义变量
publicfinalintEAST=1,WEST=2,SOUTH=3,NORTH=4;//方向常量
int[][]fillblock=newint[20][20];//定义蛇身所占位置
publicSnakeGame(){//构造函数
super("贪吃蛇");
setSize(510,510);
setVisible(true);//设定窗口属性
addKeyListener(this);//添加监听
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for(inti=1;i<=7;i++)fillblock[i][8]=EAST;//初始化蛇身属性
direction=EAST;//方向初始化的设置
FoodLocate();//定位食物
while(stat==1){
fillblock[headx][heady]=direction;
switch(direction){
case1:headx++;break;
case2:headx--;break;
case3:heady++;break;
case4:heady--;break;
}//蛇头的前进
if(heady>19||headx>19||tailx>19||taily>19||heady<0||headx<0||tailx<0||taily<0||fillblock[headx][heady]!=0){
stat=0;
break;
}//判断游戏是否结束
try{
Thread.sleep(150);}
catch(InterruptedExceptione){}//延迟
fillblock[headx][heady]=direction;
if(headx==foodx&&heady==foody){//吃到食物
FoodLocate();
food=2;
try{
Thread.sleep(100);}
catch(InterruptedExceptione){}//延迟
}
if(food!=0)food--;
else{tail=fillblock[tailx][taily];
fillblock[tailx][taily]=0;//蛇尾的消除
switch(tail){
case1:tailx++;break;
case2:tailx--;break;
case3:taily++;break;
case4:taily--;break;
}//蛇尾的前进
}
repaint();
}
if(stat==0)
JOptionPane.showMessageDialog(null,"GAMEOVER","GameOver",JOptionPane.INFORMATION_MESSAGE);
}
publicvoidkeyPressed(KeyEvente){//按键响应
intkeyCode=e.getKeyCode();
if(stat==1)switch(keyCode){
caseKeyEvent.VK_UP:if(direction!=SOUTH)direction=NORTH;break;
caseKeyEvent.VK_DOWN:if(direction!=NORTH)direction=SOUTH;break;
caseKeyEvent.VK_LEFT:if(direction!=EAST)direction=WEST;break;
caseKeyEvent.VK_RIGHT:if(direction!=WEST)direction=EAST;break;
}
}
publicvoidkeyReleased(KeyEvente){}//空函数
publicvoidkeyTyped(KeyEvente){}//空函数
publicvoidFoodLocate(){//定位食物坐标
do{
Randomr=newRandom();
foodx=r.nextInt(20);
foody=r.nextInt(20);
}while(fillblock[foodx][foody]!=0);
}
publicvoidpaint(Graphicsg){//画图
super.paint(g);
g.setColor(Color.BLUE);
for(inti=0;i<20;i++)
for(intj=0;j<20;j++)
if(fillblock[i][j]!=0)
g.fillRect(25*i+5,25*j+5,24,24);
g.setColor(Color.RED);
g.fillRect(foodx*25+5,foody*25+5,24,24);
}
publicstaticvoidmain(String[]args){//主程序
SnakeGameapplication=newSnakeGame();
}
}

❸ 怎么用Java做贪吃蛇的游戏软件呢

您好,原理:
把蛇身体的每一块看成一个对象(对象存储该块的坐标和相关信息),作为节点存储在线性链表中,再设置一个变量标志蛇的方向(通过按键可以改变)。一般人都是让每一个节点等于他指向的下一个节点,并让头节点改变位置来实现转弯和移动,这个算法复杂度太高(O(n)),实际上只要做两步操作,插入一个头节点,删除一个尾节点就可以了,新插入的头节点位置根据蛇当前的方向决定 用一个数组将蛇头的行径记录下来,然后第二段的下一个方格设置为蛇头走过的方格,这样子蛇走过的路径都是前一段走过的,最后将跟着蛇头走了,比如
蛇身的路径
for(int i=snakeLength-1;i>0;i--){
rows[i]=rows[i-1];//依次将蛇前面一段走过行的路段赋值给蛇的下一段
cols[i]=cols[i-1];//依次将蛇前面一段走过列的路段赋值给蛇的下一段
}
for(int i=1;i<snakeLength;i++){
gamePanel[rows[i]][cols[i]].setBackground(Color.red);//将整个面板上蛇身走过的行和列设置为不同的颜色,当然可以用图片来设置
}
蛇头走过的行和列(rows[0],cols[i])要根据不同的方向加减1来将面板设置成不同的颜色
如gamePanel[rows[i]-1][cols[i]+1].setBackground(Color.red)

❹ 用java做一个贪吃蛇的小游戏,怎么实现,用新建类来实现

用java做一个贪吃蛇的小游戏
最好去JAVA交流论坛下个代码

❺ Java 编写 贪吃蛇游戏的 大体思路是什么

楼主没有看到蛇移动的本质,蛇虽然是分成很多块,但他们还是一个整体,每一块的移动都和上一块有关,所以不需要对每一块都进行判断。
原理:
把蛇身体的每一块看成一个对象(对象存储该块的坐标和相关信息),作为节点存储在线性链表中,再设置一个变量标志蛇的方向(通过按键可以改变)。一般人都是让每一个节点等于他指向的下一个节点,并让头节点改变位置来实现转弯和移动,这个算法复杂度太高(O(n)),实际上只要做两步操作,插入一个头节点,删除一个尾节点就可以了,新插入的头节点位置根据蛇当前的方向决定 用一个数组将蛇头的行径记录下来,然后第二段的下一个方格设置为蛇头走过的方格,这样子蛇走过的路径都是前一段走过的,最后将跟着蛇头走了,比如
蛇身的路径
for(int i=snakeLength-1;i>0;i--){
rows[i]=rows[i-1];//依次将蛇前面一段走过行的路段赋值给蛇的下一段
cols[i]=cols[i-1];//依次将蛇前面一段走过列的路段赋值给蛇的下一段
}
for(int i=1;i<snakeLength;i++){
gamePanel[rows[i]][cols[i]].setBackground(Color.red);//将整个面板上蛇身走过的行和列设置为不同的颜色,当然可以用图片来设置
}
蛇头走过的行和列(rows[0],cols[i])要根据不同的方向加减1来将面板设置成不同的颜色
如gamePanel[rows[i]-1][cols[i]+1].setBackground(Color.red)

❻ 如何用Java语言写一个贪吃蛇游戏

❼ java贪吃蛇是怎么做出来的

/**
* MVC模式中得Viewer,只负责对数据的显示,而不用理会游戏的控制逻辑
*/
class SnakeView implements Observer {
SnakeControl control = null; //实例话一个SnakeControl对象是control ..SnakeControl在jdk中不存在可能是第3方的或者是自己编写的一个类吧
SnakeModel model = null;//如上

JFrame mainFrame; //创建一个面板类jframe
Canvas paintCanvas;
/**
*Canvas 组件表示屏幕上一个空白矩形区域,应用程序可以在该区域内绘图,或者可以从该区域捕获用户的输入事件。
*应用程序必须为 Canvas 类创建子类,以获得有用的功能(如创建自定义组件)。必须重写 paint 方法,以便在 canvas 上执行自定义图形。
*/
JLabel labelScore;//....不说了吧..

public static final int canvasWidth = 200; //常量宽度200
public static final int canvasHeight = 300;//常量高300

public static final int nodeWidth = 10;//常量宽度10
public static final int nodeHeight = 10;//常量高度10

public SnakeView(SnakeModel model, SnakeControl control) {
this.model = model;
this.control = control;

mainFrame = new JFrame("GreedSnake");//创建jframe 标题是GreedSnake

Container cp = mainFrame.getContentPane(); //得到jfram的容器

labelScore = new JLabel("Score:"); //创建jlabel 标签内容是"Score:"
cp.add(labelScore, BorderLayout.NORTH);/将jlabel添加到jfram的容器中去

paintCanvas = new Canvas(); //创建新绘图区
paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1); //设置绘图区大小
paintCanvas.addKeyListener(control);//添加键盘监听器control
cp.add(paintCanvas, BorderLayout.CENTER);//将绘图区添加到jfram容器中去.布局是BorderLayout的CENTER位置.就是东西南北中的中间

JPanel panelButtom = new JPanel();//创建一个panel
panelButtom.setLayout(new BorderLayout());//设置布局是BorderLayout
JLabel labelHelp;//标签的创建和添加开始了.......new了3遍就是实例化了3个都加到了panle的中间 ,标签的内容都是""中间的
labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.NORTH);
labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.CENTER);
labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.SOUTH);
cp.add(panelButtom, BorderLayout.SOUTH);//把这个panel添加到jframe的容器里面去

mainFrame.addKeyListener(control);//为jframe添加键盘监听器
mainFrame.pack();//调整此窗口的大小,以适合其子组件的首选大小和布局。如果该窗口和/或其所有者仍不可显示,则两者在计算首选大小之前变得可显示。在计算首选大小之后,将会验证该 Window。
mainFrame.setResizable(false);//设置此 frame 是否可由用户调整大小。false就是不能
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击又上角的就是关闭
mainFrame.setVisible(true);//设置jfram为能看到
}

void repaint() {
Graphics g = paintCanvas.getGraphics();//Graphics详细看jdk文档..我就知道是一个所有图形上下文的抽象基类..这里应该是那个画图面板

g.setColor(Color.WHITE);//设置这个颜色
g.fillRect(0, 0, canvasWidth, canvasHeight);//画一个矩形在x,y处画一个宽是200,高是300的矩形,

g.setColor(Color.BLACK);//颜色是黑的
LinkedList na = model.nodeArray;//LinkedList 类 List 接口的链接列表实现就是一个集合对象了,因为不知道SnakeModel具体是一个什么类这里就当作这个类能得到一个集合
Iterator it = na.iterator();//得到迭代器去迭代这个集合
while (it.hasNext()) {//开始用while迭代
Node n = (Node) it.next();//得到一个集合中元素.是一个Node....这里的Node不知道是什么对象..有待于研究
drawNode(g, n);//调用另外方法
}

g.setColor(Color.RED);//设置颜色是红的
Node n = model.food;//得到一个新node..看来Node这里应该是一个坐标..这里的坐标就是蛇吃的那个东西
drawNode(g, n);//画这个东西..

updateScore();//调用..
}

private void drawNode(Graphics g, Node n) {//这是一个画方的方法..动态改变方型的位置
g.fillRect(n.x * nodeWidth,
n.y * nodeHeight,
nodeWidth - 1,
nodeHeight - 1);
}

public void updateScore() {//这是更新标签的一个方法
String s = "Score: " + model.score;
labelScore.setText(s);
}

public void update(Observable o, Object arg) {//这个就是Observer监听类必须实现的方法..这里是去调用repaint()方法..repaint方法就是不断去改变画图版里面的内容的
repaint();
}
}
参考资料:以下是贪吃蛇java程序一部分,我需要下面程序代码的详细注解...

❽ java贪吃蛇原理

楼主没有看到蛇移动的本质,蛇虽然是分成很多块,但他们还是一个整体,专每一块的移动都和上一属块有关,所以不需要对每一块都进行判断。
原理:
把蛇身体的每一块看成一个对象(对象存储该块的坐标和相关信息),作为节点存储在线性链表中,再设置一个变量标志蛇的方向(通过按键可以改变)。一般人都是让每一个节点等于他指向的下一个节点,并让头节点改变位置来实现转弯和移动,这个算法复杂度太高(O(n)),实际上只要做两步操作,插入一个头节点,删除一个尾节点就可以了,新插入的头节点位置根据蛇当前的方向决定

❾ 贪吃蛇用java怎么编出来

用代码来编写吧 #include "stdafx.h" #include "IP查询.h" #include "IP查询Dlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; class CAboutDlg : public CDialog //定义一个构造函数CAboutDlg是继承自CDialog的某一个构造函数 //类 { public: CAboutDlg(); //构造函数 // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //数据交互方法,比如Static Edit这些可以接受显示数据的控件,其内容改变时,会调用此方法. //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() //将被替换下面的字符串 }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)//这是对cabloutdlg的构造函数进行初始化 //你在caboutdlg的定义里面可以看到一个enum,对idd赋值。它是你aoubt对话框的模版。 { 像这样

阅读全文

与在java中怎么做贪吃蛇相关的资料

热点内容
工藤瞳演过 浏览:259
中文字幕好看的排行榜 浏览:220
dnf90版本佣兵地轨中心 浏览:5
好色小姨整本免费 浏览:6
重生到妖神记推到叶紫芸 浏览:236
男主叫林默的末世小说 浏览:996
手机怎么打开网络 浏览:293
主角收母家族的小说 浏览:425
梁家辉吃胎儿的电影 浏览:167
以肉为主yy小说收母 浏览:171
谁有手机能看日本片的网站 浏览:300
我们看了电影英文怎么写 浏览:968
在线看那种片的网站 浏览:595
主角叫李天的小说 浏览:584
军婚肉肉的小说 浏览:298
韩国电影卖保险的女人 浏览:432
飞猫云下载的文件在哪里看 浏览:271
qq上的赞是真的赞了吗 浏览:511
火山岛电影女演员 浏览:858
永恒在线观百度云 浏览:199

友情链接