[Java第一个游戏]JFrame文本框下贪吃蛇
刚刚接触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文本框下贪吃蛇的更多相关文章
- Java 获取、删除Word文本框中的表格
本文介绍如何来获取Word文本框中包含的表格,以及删除表格. 程序测试环境包括: IDEA JDK 1.8.0 Spire.Doc.jar 注:jar导入,可通过创建Maven程序项目,并在pom.x ...
- Linux平台下贪吃蛇游戏的运行
1.参考资料说明: 这是一个在Linux系统下实现的简单的贪吃蛇游戏,同学找帮忙,我就直接在Red Hat中调试了一下,参考的是百度文库中"maosuhan"仁兄的文章,结合自己的 ...
- Easyui表单,文本框,下拉菜单三级联动练习代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Java 添加、读取、删除Excel文本框
本文介绍通过Java程序添加文本框到Excel的方法,添加文本框时,可以添加文本.设置文本方向.文本对齐方式.设置文本框大小.位置.填充色/填充图片.文本框旋转角度.文本框名称.可选文本.文本框隐藏或 ...
- 用MVC的辅助方法自定义了两个控件:“可编辑的下拉框控件”和“文本框日历控件”
接触MVC也没多长时间,一开始学的时候绝得MVC结构比较清晰.后来入了门具体操作下来感觉MVC控件怎么这么少还不可以像ASP.net form那样拖拽.这样设计界面来,想我种以前没学过JS,Jquer ...
- 关于MFC文本框输入内容的获取 与 设置文本框的内容
八月要开始做界面了<( ̄︶ ̄)/,然而目前只会用MFC╮(╯▽╰)╭ 好吧,言归正传,设置好文本框后,要获取用户输入的内容,可以用: GetDlgItemText() ; 这个函数有两个参数,第 ...
- Java实现贪吃蛇
游戏界面基本布局 贪吃蛇是基于JFrame的一款小游戏.它主要有两部分组成,一个是显示区域,一个是按钮区域.这两个区域都用JPanel来实现. 首先需要创建一个基于JFrame的类,例如创建一个MyF ...
- [置顶] 63行代码完美实现html5 贪吃蛇游戏
以前也很少关注html5,感觉选择html已经慢慢成为趋势,想了解下.就找了个游戏学习了,写完这个游戏感觉html5和js结合很紧密,如果js不是特别好.估计需要先补习下js,这个只是个人的建议,不一 ...
- 用C++实现的贪吃蛇游戏
我是一个C++初学者,控制台实现了一个贪吃蛇游戏. 代码如下: //"贪吃蛇游戏"V1.0 //李国良于2016年12月29日编写完成 #include <iostream& ...
随机推荐
- 201521123039 《java程序设计》第九周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常 常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? ...
- 201521123026《JAVA程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- [js高手之路]Node.js模板引擎教程-jade速学与实战4-模板引用,继承,插件使用
一.block 模块复用 把需要复用的模块用block定义 block后面跟上模块的名字,引用一次block 内容就会被复用一次 编译之后的结果: 二,继承模板(extends) 在实际开发中,网站的 ...
- python 浅析对return的理解
最近很忙,但是还是很认真的学习python这个东西,不是出于什么目的,只是单纯的喜欢罢了.最近学习的东西比较简单,但是也遇到了一些问题,就是比较迷惑人的问题,今天小编就在这里讲讲自己的对return的 ...
- 基于maven的profile实现动态选择配置文件
需求 根据选择不同的部署环境自动替换相关配置变量,如连接的数据库等. 最终效果概览 部署环境分为dev和release 工程目录结构 myproject |-profile | |-dev | | | ...
- YYHS-Floor it
题目描述 输入 输出 样例输入 5 97 样例输出 11 提示 题解 先不管p,通过列举前面几项,不难发现当i为偶数时,a[i]=a[i-1]+a[i-2],当i为奇数时,a[i]=a[i ...
- Spring - bean的autowire属性(自动装配)
当我们要往一个bean的某个属性里注入另外一个bean,我们会使用<property> + <ref/>标签的形式.但是对于大型项目,假设有一个bean A被多个bean引用注 ...
- Spring @RequestParam乱码问题
在网上找了很多资料才找到解决的方法,通过URL传递命名参数,后台接收的却是乱码解决方法如下: 方法一:将接收的参数重新编码 @RequestMapping(value="/handle&qu ...
- js 倒计时(服务器时间同步)
首先说一下,为什么要服务器时间同步, 因为服务器时间和本地电脑时间存在一定的时间差.有些对时效性要求非常高的应用,例如时时彩开奖,是不能容忍这种时间差存在的. 方案1:每次倒计时去服务端请求时间 // ...
- eclipse中搜狗输入法中文状态下输出的全是英文
在eclipse中搜狗输入法变成了如图这样 在中文状态下,提示的全是中文. 查询到的解决方案: 快捷键ctrl+shift+E关闭搜狗智能英文.然而与eclipse中 Ctrl+shift+E 快捷键 ...