導航:首頁 > 編程語言 > 在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中怎麼做貪吃蛇相關的資料

熱點內容
有趣的家庭的網站有哪些 瀏覽:148
域名升級訪問通知 瀏覽:270
片名《鬼作秀之頭顱鬼屋》 瀏覽:936
電腦系統host文件 瀏覽:996
求一個在線播放的網站 瀏覽:596
四級丶四級電影﹥ 瀏覽:582
怎麼把cad的工具欄調出來 瀏覽:742
強奸了女僵屍的電影 瀏覽:15
能在線觀看最新網址 瀏覽:317
3d電影下載網站3d電影 瀏覽:261
華為手機如何把app弄成小窗口 瀏覽:589
flash的工具欄 瀏覽:106
古風sq片 瀏覽:705
如何挑選軟體編程培訓機構 瀏覽:873
巫師3112升級 瀏覽:163
zipjs怎麼用 瀏覽:619
手游天龍八部俠客升級 瀏覽:437
iphone5s蜂窩數據和3g有什麼區別 瀏覽:547
文件被病毒隱藏win10 瀏覽:710
主角重生到德國的小說 瀏覽:410

友情鏈接