博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
贪吃蛇java程序简化版_JAVA简版贪吃蛇
阅读量:6452 次
发布时间:2019-06-23

本文共 3133 字,大约阅读时间需要 10 分钟。

package com.wxh.snake;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.GridLayout;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.util.ArrayList;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class Snake {

public static void main(String[] args) {

JFrame jf=new JFrame();

jf.setBounds(400, 200, 432, 454);

jf.setLayout(null);

jf.setTitle("贪吃蛇");

jf.setDefaultCloseOperation(3);

SnakePanel sp=new SnakePanel();

jf.add(sp);

jf.setVisible(true);

sp.requestFocus(true);

sp.headGo();

}

}

class SnakePanel extends JPanel implements KeyListener{

private int speed=400;//蛇移动的速度

private int fangxiang=4;//运动方向

private JPanel[] jps=new JPanel[400];

//定义一个蛇头

private Rect headRect;

//定义整个身体

private ArrayList list;

//定义食物小方块

private Rect foodRect;

public SnakePanel(){

//初始化舌头的坐标

headRect=new Rect(0,0);

list=new ArrayList();

//把舌头添加进去

list.add(headRect);

//产生一个食物

foodRect=randomFood();

this.setSize(419,419);

this.setBackground(Color.black);

this.setLayout(new GridLayout(20, 20, 1, 1));

for(int i=0;i

jps[i]=new JPanel();

jps[i].setBackground(Color.green);

this.add(jps[i]);

}

this.addKeyListener(this);

}

//随机食物的方法

public Rect randomFood(){

return new Rect((int)(Math.random()*20)*21,(int)(Math.random()*20)*21);

}

//判断食物是否被吃到

public boolean eat(){

boolean flag=false;

if(headRect.getX()==foodRect.getX() && headRect.getY()==foodRect.getY()){

flag=true;

if(speed>=200){

speed-=50;

}else if(speed>=100){

speed-=20;

}else if(speed>=40){

speed-=4;

}else if(speed == 10){

}

}

return flag;

}

@Override

public void paint(Graphics g) {

super.paint(g);

g.setColor(Color.red);

//g.fillRect(headRect.getX(), headRect.getY(), 20, 20);//画舌头

//画整个蛇

for(int i=0;i

g.fillRect(list.get(i).getX(), list.get(i).getY(), 20, 20);

}

g.fillRect(foodRect.getX(), foodRect.getY(), 20, 20);//画食物

}

//身体移动

public void bodyGo(){

for(int i=list.size()-1;i>0;i--){

list.get(i).setX(list.get(i-1).getX());

list.get(i).setY(list.get(i-1).getY());

}

}

//判断游戏结束

//蛇头运动

public void headGo(){

while(true){

bodyGo();

if(fangxiang==1){

headRect.setY(headRect.getY()-21);

}else if(fangxiang==2){

headRect.setY(headRect.getY()+21);

}else if(fangxiang==3){

headRect.setX(headRect.getX()-21);

}else if(fangxiang==4){

headRect.setX(headRect.getX()+21);

}

repaint();

if(eat()){

list.add(foodRect);

foodRect=randomFood();//如果食物被吃到,则将食物的坐标改动

}

try {

Thread.sleep(speed);//睡眠控制速度

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

@Override

public void keyPressed(KeyEvent e) {

int i=e.getKeyCode();

if(i==KeyEvent.VK_UP){

fangxiang=1;

}else if(i==KeyEvent.VK_DOWN){

fangxiang=2;

}else if(i==KeyEvent.VK_LEFT){

fangxiang=3;

}else if(i==KeyEvent.VK_RIGHT){

fangxiang=4;

}

repaint();

}

@Override

public void keyReleased(KeyEvent e) {

// TODO Auto-generated method stub

}

@Override

public void keyTyped(KeyEvent e) {

// TODO Auto-generated method stub

}

}

class Rect{

private int x;

private int y;

public Rect() {

}

public Rect(int x, int y) {

this.x = x;

this.y = y;

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

}

转载地址:http://lcyzo.baihongyu.com/

你可能感兴趣的文章
[BZOJ1503]郁闷的出纳员(Splay)
查看>>
iOS 各种传值方式
查看>>
C程序设计学习笔记(完结)
查看>>
Django基础
查看>>
c#的DateTime的各种字符串格式
查看>>
ASP.NET MVC 视图(五)
查看>>
log4j 配置文件
查看>>
apxs:Error: Command failed with rc=65536;mod_evasive;apache2
查看>>
vmware12安装centos7系统详解
查看>>
Python——第一个python程序helloworld
查看>>
APP支付(.NET版)
查看>>
iOS开发笔记 5、开发工具Xcode,Inteface Builder
查看>>
selenium IDE 安装环境配置
查看>>
没办法淡定
查看>>
CSS知识点
查看>>
使用idea创建springboot项目并打成war包发布到tomcat8上
查看>>
依赖反转Ioc和unity,autofac,castle框架教程及比较
查看>>
Android—监听器
查看>>
ps填充颜色快捷键
查看>>
运算符
查看>>