刚刚接触java的文本框绘图的知识点,然后就可以按照老师的提醒做一些简单的游戏,对JFrame加深一下,下面就贪吃蛇给出一些源代码,其实正真的实现的代码并不多,只是稍微处理一下就可以明白,下面代码均有注释!

第一个类shake类

import java.awt.Color;

import java.awt.Graphics;

import java.util.Random;

public class Snake {

public int w;//半径

public int x , y;//球心坐标

Color co;//颜色

public int dir = 4;

public Snake(int w,int x , int y ,Color col){

this.w = w;

this.x = x;

this.y = y;

this.co = col;

}

public void draw(Graphics g){

g.setColor(co);//设置填充的颜色

g.fillArc(SnakeGame.OFF_W+x*w, SnakeGame.OFF_H+y*w, w, w,0,360);//设置矩形,4个参数,xy坐标,高跟宽

}

}

第二个类SnakeGame

import java.awt.*;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.util.*;

import javax.swing.JFrame;

public class SnakeGame extends JFrame{

public final static int SCREEN_W = 800,SCREEN_H = 600;//设置屏幕大小

public final static int OFF_W = 200,OFF_H = 100;//设置编辑框距屏幕边缘的宽高

int key;//记录上下左右键的KeyCode

boolean isPress;//判断是否按下按键

Graphics offg;//画笔

Image img;//画布

ArrayList<Snake> Snakes = new ArrayList<Snake>();//储存蛇的容器

private static final SnakeGame g = new SnakeGame();

public static SnakeGame get_Game(){

return g;

}

private SnakeGame(){

setBounds(100,100,SCREEN_W,SCREEN_H);//设置屏幕大小以及起始坐标

setTitle("SnakeGame");//设置标题

setVisible(true);//设置时是否显示

setDefaultCloseOperation(EXIT_ON_CLOSE);//设置小红叉

addKeyListener(new KeyAdapter() {//键盘监听

@Override

public void keyPressed(KeyEvent e) {//按键盘事件

// TODO Auto-generated method stub

isPress = true;

key = e.getKeyCode();

}

@Override

public void keyReleased(KeyEvent e) {//松键盘事件

// TODO Auto-generated method stub

isPress = false;

key = -1;

}

});

}

public int snakew = (SCREEN_W - 2*OFF_W)/40;//设置蛇的一格的大小

Snake food;//食物

Snake head;//蛇头

public Random rd = new Random();

public void paint(Graphics g){

if(img == null){

img = createImage(SCREEN_W,SCREEN_H);

offg = img.getGraphics();

int xx = rd.nextInt((SCREEN_W - 2*OFF_W)/snakew);

int yy = rd.nextInt((SCREEN_W - 2*OFF_W)/snakew);

food = new Snake(snakew, xx, yy, Color.red);//随机产生食物

head = new Snake(snakew, 0, 0, Color.yellow);

Snakes.add(head);//添加蛇头

}

offg.setColor(Color.white);

offg.fillRect(0, 0, SCREEN_W, SCREEN_H);

offg.setColor(Color.black);

offg.fillRect(OFF_W,OFF_H,(SCREEN_W - 2*OFF_W),(SCREEN_H - 2*OFF_H));

//判断按键按下去生效

if(isPress){

Snake head = Snakes.get(0);//获得蛇头

switch(key){//蛇头方向变,上下左右

case 38:

if(head.dir != 2){

head.dir = 1;

}

break;

case 40:

if(head.dir != 1){

head.dir = 2;

}

break;

case 37:

if(head.dir != 4){

head.dir = 3;

}

break;

case 39:

if(head.dir != 3){

head.dir = 4;

}

break;

}

}

Snake head = Snakes.get(0);

//吃到食物后,在随机产生一个食物

if(head.x == food.x && head.y == food.y){

food.x = rd.nextInt((SCREEN_W - 2*OFF_W)/snakew);

food.y = rd.nextInt((SCREEN_W - 2*OFF_W)/snakew);

Snakes.add(new Snake(snakew, head.x, head.y, Color.blue));

}//先蛇身再蛇头

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

Snakes.get(i).x = Snakes.get(i-1).x;

Snakes.get(i).y = Snakes.get(i-1).y;

}

switch(head.dir){

case 1:

head.y--;

break;

case 2:

head.y++;

break;

case 3:

head.x--;

break;

case 4:

head.x++;

break;

}

if(head.x > 39){

head.x = 0;

}else if(head.x < 0){

head.x = 39;

}

if(head.y > 39){

head.y = 0;

}else if(head.y < 0){

head.y = 39;

}

food.draw(offg);

for (int i = 0; i < Snakes.size(); i++) {

Snakes.get(i).draw(offg);

}

g.drawImage(img,0,0,null);

repaint();//重绘

try {

Thread.sleep(150);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

第三个类测试类MainTest

public class MainTest {
    public static void main(String[] args) {
     SnakeGame g = SnakeGame.get_Game();
    }
}

[Java第一个游戏]JFrame文本框下贪吃蛇的更多相关文章

  1. Java 获取、删除Word文本框中的表格

    本文介绍如何来获取Word文本框中包含的表格,以及删除表格. 程序测试环境包括: IDEA JDK 1.8.0 Spire.Doc.jar 注:jar导入,可通过创建Maven程序项目,并在pom.x ...

  2. Linux平台下贪吃蛇游戏的运行

    1.参考资料说明: 这是一个在Linux系统下实现的简单的贪吃蛇游戏,同学找帮忙,我就直接在Red Hat中调试了一下,参考的是百度文库中"maosuhan"仁兄的文章,结合自己的 ...

  3. Easyui表单,文本框,下拉菜单三级联动练习代码

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. Java 添加、读取、删除Excel文本框

    本文介绍通过Java程序添加文本框到Excel的方法,添加文本框时,可以添加文本.设置文本方向.文本对齐方式.设置文本框大小.位置.填充色/填充图片.文本框旋转角度.文本框名称.可选文本.文本框隐藏或 ...

  5. 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”

    接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...

  6. 关于MFC文本框输入内容的获取 与 设置文本框的内容

    八月要开始做界面了<( ̄︶ ̄)/,然而目前只会用MFC╮(╯▽╰)╭ 好吧,言归正传,设置好文本框后,要获取用户输入的内容,可以用: GetDlgItemText() ; 这个函数有两个参数,第 ...

  7. Java实现贪吃蛇

    游戏界面基本布局 贪吃蛇是基于JFrame的一款小游戏.它主要有两部分组成,一个是显示区域,一个是按钮区域.这两个区域都用JPanel来实现. 首先需要创建一个基于JFrame的类,例如创建一个MyF ...

  8. [置顶] 63行代码完美实现html5 贪吃蛇游戏

    以前也很少关注html5,感觉选择html已经慢慢成为趋势,想了解下.就找了个游戏学习了,写完这个游戏感觉html5和js结合很紧密,如果js不是特别好.估计需要先补习下js,这个只是个人的建议,不一 ...

  9. 用C++实现的贪吃蛇游戏

    我是一个C++初学者,控制台实现了一个贪吃蛇游戏. 代码如下: //"贪吃蛇游戏"V1.0 //李国良于2016年12月29日编写完成 #include <iostream& ...

随机推荐

  1. Java课程设计 猜数游戏团队博客

    1.团队成员介绍(需要有照片) 曾飞远(组长):网络1513 201521123080 江鹭涛(组员):网络1513 201521123075 2. 项目git地址 3. 项目git提交记录截图(要体 ...

  2. 201521123121 《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. Java流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需要的类.所有 ...

  3. 201521123092《java程序设计》第十三周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 2.1. 网络基础 1.1 比较ping www.baidu.com与ping cec.j ...

  4. Eclipse rap 富客户端开发总结(8) : 发布到tomcat后解决rap编码和字符集的问题

    1 .解决 rap 字符集乱码的问题 字符集问题,解决办法:   在plugin.xml - build.properties 中添加 javacDefaultEncoding.. = UTF-8   ...

  5. foreach嵌套循环

    最近几天被这个嵌套搞晕了,还好经过几天的努力终于解决了,特记录下,因为要传两个List集合到jsp页面,还都是在一起输出,发现不能把两个集合放在一个foreach,所以就写了两个foreach来接受, ...

  6. HTTP第一篇

    为什么要学HTTP? 我们绝大多数的Web应用都是基于HTTP来进行开发的.我们对Web的操作都是通过HTTP协议来进行传输数据的. HTTP的诞生主要是为了能够让文档之间相互关联,形成超文本可以互相 ...

  7. org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably du

    如果出现类似下面的错误,原因就是JDK版本太高了,我换成1.7就没事了 Caused by: org.springframework.core.NestedIOException: ASM Class ...

  8. Servlet第三篇【request和response简介、response的常见应用】

    response.request对象 Tomcat收到客户端的http请求,会针对每一次请求,分别创建一个代表请求的request对象.和代表响应的response对象 既然request对象代表ht ...

  9. Java内存分配之堆、栈和常量池

    Java内存分配主要包括以下几个区域: 1. 寄存器:我们在程序中无法控制 2. 栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中 3. 堆:存放用new产生的数据 4. 静 ...

  10. 关于maven中一些问题的解决尝试

    在maven中会遇到很多问题,pom.xml啊,数据库没有自动建表等等. 需要先把运行项目,所依赖的jar项目install安装一下,然后Maven --> update project 一下. ...