java贪吃蛇代码(最全的java游戏网站)

   2023-03-20 互联网0
核心提示:年末啦,小编首先祝各位程序员新年快乐!真的是应了那句话:过了12岁之后,那岁数可就是不按规律的蹭蹭的往上涨啊,就在今年2018年,最后一批90后也步入了18岁的成人礼。正式宣布90后退出青年市场,00后统治世界~我们也即将是老去的一代。

java贪吃蛇代码(最全的java游戏网站)

年末啦,小编首先祝各位程序员新年快乐!真的是应了那句话:过了12岁之后,那岁数可就是不按规律的蹭蹭的往上涨啊,就在今年2018年,最后一批90后也步入了18岁的成人礼。正式宣布90后退出青年市场,00后统治世界~我们也即将是老去的一代。

小编偶然想到童年玩过的那些经典游戏,在当下吃鸡,撸啊撸风靡的时代,那些小游戏渐渐被人遗忘,现在回想起来,当时那些游戏还是很好玩的呢,各位看官觉得呢?所以小编自己动手写出了贪吃蛇游戏的java代码,又重温了一下,仿佛又回到了童年时代。下面给大家介绍一下代码的逻辑和具体的代码是什么:

1.逻辑判断

要点分析:

1)数据结构:matrix[][]用来存储地图上面的信息,如果什么也没有设置为false,

如果有食物或蛇,设置为true;nodeArray,一个linkedList,用来保存蛇的每

一节;food用来保存食物的位置;而Node类是保存每个位置的信息。

2)重要函数:

changeDirection(int newDirection) ,用来改变蛇前进的方向,而且只是

保存头部的前进方向,因为其他的前进方向已经用位置来指明了。 其中newDirection

必须和原来的direction不是相反方向,所以相反方向的值用了同样的奇偶性。在测试

的时候使用了direction%2!=newDirection%2 进行判断。

moveOn(),用来更新蛇的位置,对于当前方向,把头部位置进行相应改变。如果越界,

结束;否则,检测是否遇到食物(加头部)或身体(结束);如果什么都没有,加上头部,

去掉尾部。由于用了linkedList数据结构,省去了相当多的麻烦。

2.具体代码

public class SnakePanel extends JPanel implements KeyListener,ActionListener {

ImageIcon up = new ImageIcon(“up.wf”);

ImageIcon down = new ImageIcon(“down.wf”);

ImageIcon right = new ImageIcon(“right.wf”);

ImageIcon left = new ImageIcon(“left.wf”);

ImageIcon title = new ImageIcon(“title.wf”);

ImageIcon food = new ImageIcon(“food.wf”);

ImageIcon body = new ImageIcon(“body.wf”);

int[] snakex = new int[750];

int[] snakey = new int[750];

Random rand = new Random();

int foodx = rand.nextInt(34)*25+25;

int foody = rand.nextInt(24)*25+75;

int len = 3;

int score = 0;

String fangxiang = “R”;//R右、L左、U上、D下

boolean isStarted = false;//判断游戏是否开始

boolean isFailed = false;//判断是否死亡

//计时器:1.时间 2.时间到了去找的对象

Timer timer = new Timer(300, this);

public SnakePanel(){

this.setFocusable(true);//取得焦点

this.addKeyListener(this);

setup();

timer.start();

}

public void paint(Graphics g){

// super.paint(g);

// this.setBackground(Color.WHITE);

this.getRootPane().setBackground(Color.WHITE);

title.paintIcon(this, g, 25, 11);

g.fillRect(25, 75, 850, 600);

//画蛇头,先判断蛇头的方向

if(fangxiang.equals(“R”)){

right.paintIcon(this, g, snakex[0], snakey[0]);

}else if(fangxiang.equals(“L”)){

left.paintIcon(this, g, snakex[0], snakey[0]);

}else if(fangxiang.equals(“U”)){

up.paintIcon(this, g, snakex[0], snakey[0]);

}else if(fangxiang.equals(“D”)){

down.paintIcon(this, g, snakex[0], snakey[0]);

}

//画蛇的身体

for (int i = 1; i < len; i++) {

body.paintIcon(this, g, snakex[i], snakey[i]);

}

//游戏没有开始时,显示提示语(!isStarted)

if(isStarted == false){

g.setColor(Color.WHITE);

g.setFont(new Font(“微软雅黑”,Font.BOLD,35));

g.drawString(“Press Space to Start/Pause”, 250, 350);

}

if(isFailed){

g.setColor(Color.WHITE);

g.setFont(new Font(“微软雅黑”,Font.BOLD,35));

g.drawString(“Game Over! Press Space to ReStart”, 200, 350);

}

food.paintIcon(this, g, foodx, foody);

//添加分数

g.setColor(Color.WHITE);

g.drawString(“Score : “+score, 600, 45);

}

public void setup(){

isStarted = false;

isFailed = false;

len = 3;

snakex[0] = 100;

snakey[0] = 100;

snakex[1] = 75;

snakey[1] = 100;

snakex[2] = 50;

snakey[2] = 100;

}

@Override

public void keyPressed(KeyEvent e) {

// TODO Auto-generated method stub

int keyCode = e.getKeyCode();

//实现转向,不能实现反转

if(keyCode == KeyEvent.VK_SPACE){

if (isFailed) {

// isStarted = false;

// isFailed = false;

setup();

}else {

// isStarted = true;

isStarted = !isStarted;//改变当前状态

// repaint();

}

}else if(keyCode == KeyEvent.VK_UP && fangxiang != “D”){

fangxiang = “U”;

}else if(keyCode == KeyEvent.VK_DOWN && fangxiang != “U”){

fangxiang = “D”;

}else if(keyCode == KeyEvent.VK_RIGHT && fangxiang != “L”){

fangxiang = “R”;

}else if(keyCode == KeyEvent.VK_LEFT && fangxiang != “R”){

fangxiang = “L”;

}

}

@Override

public void actionPerformed(ActionEvent e) {

// TODO Auto-generated method stub

//1.再定义个闹钟

timer.start();

//2.移动数据

if (isStarted && !isFailed) {

//移动身体

for (int i = len; i >0; i–) {

snakex[i] = snakex[i-1];

snakey[i] = snakey[i-1];

}

//移动头

if(fangxiang.equals(“R”)){

snakex[0] = snakex[0] + 25;

if(snakex[0] > 850)

snakex[0] = 25;

}else if(fangxiang.equals(“L”)){

snakex[0] = snakex[0] – 25;

if(snakex[0] < 25) snakex[0] = 850;

}else if(fangxiang.equals(“U”)){

snakey[0] = snakey[0] – 25;

if(snakey[0] < 75) snakey[0] = 650;

}else if(fangxiang.equals(“D”)){

snakey[0] = snakey[0] + 25;

if(snakey[0] > 650) snakey[0] = 75;

}

}

//吃食物

if(snakex[0] == foodx && snakey[0] == foody){

len ++;

score ++;

foodx = rand.nextInt(34)*25+25;

foody = rand.nextInt(24)*25+75;

}

//判断身体相碰,游戏结束

for (int i = 1; i < len; i++) {

if (snakex[0] == snakex[i] && snakey[0] == snakey[i]) {

isFailed = true;

}

}

//3.repaint()

repaint();

}

@Override

public void keyReleased(KeyEvent e) {

// TODO Auto-generated method stub

}

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

}

}

package 贪吃蛇;

import java.applet.Applet;

import java.io.File;

import java.net.MalformedURLException;

import javax.swing.Jframe;

public class Snake {

public static void main(String[] args) {

// TODO Auto-generated method stub

Jframe frame = new Jframe();

frame.setBounds(10, 10, 900, 720);

frame.setResizable(false);

frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);

SnakePanel panel = new SnakePanel();

frame.add(panel);

frame.setVisible(true);

}

}

代码量有点大,小伙伴们可以复制到eclipse中运行就可以了。

在最后呢,祝各位小伙伴永远18岁,新年快乐~谢谢观看~

 
标签: 代码 头部 食物
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与爱美生活网(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 网络连接失败错误代码678(计算机数据电话线)
    网络连接失败错误代码678(计算机数据电话线)
    错误代码678是宽带的故障代码之一。其含义是远程计算机无响应。简单地说就是网络不通了。宽带adsl拨号上网使用pppoe协议连接,通过电话线传输数据,使用adsl专用modem实现数据的调制解调,错误提示678的含义是,远程计算机无响应,意
  • uusd代码是什么(代码格式计算机计)
    uusd代码是什么(代码格式计算机计)
    uusd代码是一种管理用户的计算机语言,像手机等都是有自己的uusd代码的,而uusd则主要是为移动通信用户提供基于文本的界面义为移动台和网络应用之间经过归属位置寄存器(HLR)传递信息和指令的一种机制。总的来说,代码可以理解为一种计算机语
  • windows服务开发系统(Windows应用与服务之间数据沟通)
    windows服务开发系统(Windows应用与服务之间数
    摘要:8月5日,美国国务院宣布了由国务卿庞贝发布的清洁网络计划的补充规定。随后几天,微软公司因其在官网更新了Microsoft服务协议上了热搜!网上传言微软准备“断供中国”,不少网友们为此炸开了锅,难道以后我们就用不了Windows系统了吗
  • 什么是开源代码(源代码如何生成软件)
    什么是开源代码(源代码如何生成软件)
    本周,我们正式在Github和Gitee开源了明道云容器版本(私有部署)的前端代码库,并将其命名为“明道云Openweb”。 配合明道云私有部署社区版,所有用户不仅可以免费获得一个企业级APaaS产品的使用权,还通过Openweb获得
  • svg是什么(图像图形矢量代码)
    svg是什么(图像图形矢量代码)
    SVG可以算是目前最最火热的图像文件格式了,它的英文全称为ScalableVectorGraphics,意思为可缩放的矢量图形。它是基于XML(ExtensibleMarkupLanguage),由WorldWideWebConsortiu
  • 联通宽带错误代码678(检查连接路由器电)
    联通宽带错误代码678(检查连接路由器电)
    宽带上网显示错误678是因为MODEM损坏,网线、网卡接触不良,电话线路障碍等原因引起。处理方法如下:1、检查帐号是否正常,正常情况下POWER,DSL link,LAN link长亮,若不亮或闪烁请关闭MODEM,重接内线;2、检查电话线
  • cpb生产日期怎么看(的是第一个第二个)
    cpb生产日期怎么看(的是第一个第二个)
    有时候第一位数字不用看,第一位字母开始看起。第一个是月,第二个是年,你的是2006年的3月,你的年的是对的,月是:B4,D5,F6,H7,J8,L9,N10,P11,R12,T1,V2,X3.年份代码:J,2005;L,2006;N,200
  • android状态栏透明效果(android透明背景代码)
    android状态栏透明效果(android透明背景代码)
    前言 原来做的效果,如下图(顶部有一条明显的橙色状态栏): 改过之后(顶部状态栏是透明的): 我发现网上写的一些文章,不够简洁明了,我整理了一下,复制粘贴一下就可以在项目中运用。 首先,在你的Activity中添加下面四个方法(
  • 区域代码是什么意思(行政区划民政部阿)
    区域代码是什么意思(行政区划民政部阿)
    区域代码也称行政代码,它是国家行政机关的识别符号,由9位阿拉伯数字组成,相当于机关单位的身份号码。行政区划代码是中央集权制主权国家对能够统治的行施管辖区域进行分级分层进行管辖用信息化手段编制的对各层级行政区划编制的替代数码。一般执行两项国家
  • 植物大战僵尸怎么输入代码(培养智慧树获得)
    植物大战僵尸怎么输入代码(培养智慧树获得)
    植物大战僵尸中的代码是植物大战僵尸的彩蛋,可以在培养智慧树的时候获得。一起来看一下,代码如何输入吧。可在玩任意模式时,直接输入指令,如果不能快速输入,可以暂停后在进行输入。每次输入成功都会有提示音哦。结束代码的方式是再次输入代码,输入完成依
点击排行