用java编写游戏九格子游戏

求JAVA数字魔板游戏程序,就是有九个格子,一个格子是空的,鼠标点击八个数字排序基本功能(1)游戏规则一个3×3的魔板,有一个格子是空的,其他格子内随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断的移动方块,直到方块一行一行的按数字顺序排好。(2)程序功能三个基本功能:方块移动,游戏计时,游戏控制(改变游戏状态)。(3)程序界面主菜单项只有“游戏”,“游戏”下拉菜单有&开始,暂停,停止,退出。游戏开始就开始计时,暂停停止计时,数字魔板背景色为黄色。&
看看吧 seinstein_
为您推荐:
扫描下载二维码java编写贪吃蛇小游戏
投稿:hebedich
字体:[ ] 类型:转载 时间:
贪吃蛇是经典手机游戏,既简单又耐玩。通过控制蛇头方向吃蛋,使得蛇变长,从而获得积分。今天我们就来用java来实现下贪吃蛇小游戏,有需要的小伙伴可以参考下
废话不多说,直接奉上代码:
Frame.java
import java.awt.G
import java.awt.M
import java.awt.MenuB
import java.awt.MenuI
import java.awt.event.ActionE
import java.awt.event.ActionL
import java.awt.event.KeyE
import java.awt.event.KeyL
import javax.swing.JF
public class Frame extends JFrame implements KeyListener {
Boolean isA
Boolean isP
private static final long serialVersionUID = 1L;
public Frame(){
// TODO Auto-generated constructor stub
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,300);
addKeyListener(this);
panel = new Panel();
add(panel);
setVisible(true);
direction = new Character('d');
MenuBar menuBar = new MenuBar();
Menu menu = new Menu("menu");
MenuItem reset = new MenuItem("newgame");
MenuItem pause= new MenuItem("pause");
pause.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(!isPause) isPause=
reset.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
menu.add(reset);
menu.add(pause);
menuBar.add(menu);
setMenuBar(menuBar);
public void reset(){
panel.reset();
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.getKeyCode()==KeyEvent.VK_UP)
direction = 'w';
if(e.getKeyCode()==KeyEvent.VK_DOWN) direction = 's';
if(e.getKeyCode()==KeyEvent.VK_LEFT) direction = 'a';
if(e.getKeyCode()==KeyEvent.VK_RIGHT) direction = 'd';
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
public void paint(Graphics g){
panel.repaint();
Launch.java
import java.util.T
import java.util.TimerT
public class Launch extends TimerTask {
Frame frame = new Frame();
public Launch() {
// TODO Auto-generated constructor stub
boolean crashWall(){
SnakeBody sb = frame.panel.snake.getFirst();
if((sb.x&0)||(sb.y&0)||(sb.x&=Panel.LINE)||(sb.y&=Panel.LINE))
void initial(){
frame.panel.snake.add(newBody());
frame.panel.food = newBody();
public void run() {
// TODO Auto-generated method stub
if(frame.panel.snake.isEmpty())
initial();
if(frame.isAlive)
if(!frame.isPause){
if(goStraight())
frame.isAlive =
frame.repaint();
if(crashWall()) frame.isAlive =
SnakeBody newBody(){
SnakeBody sb = new SnakeBody();
boolean overlap =
while(overlap){
sb.x = (int) (Math.random()*(Panel.LINE-2)+1);
sb.y = (int) (Math.random()*(Panel.LINE-2)+1);
if(!frame.panel.snake.isEmpty())
for(SnakeBody s : frame.panel.snake)
if(sb.equals(s))
void eat(SnakeBody sb){
frame.panel.snake.addFirst(sb);
boolean goStraight(){
boolean result =
SnakeBody sb =new SnakeBody(frame.panel.snake.getFirst());
frame.panel.snake.removeLast();
if(frame.direction=='w')
sb.turnUp();
if(frame.direction=='s')
sb.turnDown();
if(frame.direction=='a')
sb.turnLeft();
if(frame.direction=='d')
sb.turnRight();
for(SnakeBody s : frame.panel.snake){
if(sb.equals(s)) result =
frame.panel.snake.addFirst(sb);
if(sb.equals(frame.panel.food)){
if(frame.direction=='w')
frame.panel.food.turnUp();
if(frame.direction=='s')
frame.panel.food.turnDown();
if(frame.direction=='a')
frame.panel.food.turnLeft();
if(frame.direction=='d')
frame.panel.food.turnRight();
eat(frame.panel.food);
frame.panel.food = newBody();
public static void main(String[] args){
// TODO Auto-generated method stub
Launch timertask = new Launch();
Timer timer = new Timer();
timer.schedule(timertask,0,500);
Panel.java
import java.awt.C
import java.awt.G
import java.util.LinkedL
import javax.swing.JP
public class Panel extends JPanel {
private static final long serialVersionUID = 1L;
public LinkedList&SnakeBody& snake = new LinkedList&SnakeBody&();
static final int LINE = 10;
SnakeBody food = new SnakeBody(-99,-99);
public Panel() {
// TODO Auto-generated constructor stub
public void reset(){
snake.clear();
public void paint(Graphics g){
g.setColor(Color.white);
g.fillRect(0, 0, getWidth(), getHeight());
for(SnakeBody sb : snake){
g.setColor(Color.black);
g.drawRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE);
g.setColor(Color.orange);
g.fillRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE);
g.setColor(Color.red);
g.fillRect(food.x*getWidth()/LINE,food.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE);
SnakeBody.java
class SnakeBody {
public SnakeBody() {
// TODO Auto-generated constructor stub
public SnakeBody(int a,int b){
public SnakeBody(SnakeBody sb){
this(sb.x,sb.y);
public void turnUp(){
public void turnDown(){
public void turnLeft(){
public void turnRight(){
boolean equals(SnakeBody s){
if((x==s.x)&&(y==s.y))
以上所述就是本文给大家分享的贪吃蛇的全部代码了,希望能够对大家熟练掌握java有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具我是一名Java初学者
这是我写的第一个小游戏,特此纪念下
--------------------------------------------------------
-------------------------------------------------------------------------------------------------------
package BirdG
&* 1.找对象定义属性
&* 2.为4个类 BirdGame,Ground,Colunm,Bird分别添加构造方法,初始化属性变量
&* 3.设置窗口框架:编写BirdGame类中的main方法,设置窗口大小,居中,设置关闭按钮,和设置窗口可见
&* 4.绘制界面:在BirdGame类中重写print()方法
&* 5.写类的运动方法step();在birdgame类中写action方法,在main方法中启用action方法
&* 6.实现鼠标事件控制小鸟能点击上升
&* 7.实现记分,画分
&* 8.写鸟类的碰撞方法检测(鸟碰地面和鸟碰撞柱子)显示游戏结束
&* 9.实现游戏状态:开始,结束,重新开始
import java.awt.C
import java.awt.F
import java.awt.G
import java.awt.Graphics2D;
import java.awt.event.KeyA
import java.awt.event.KeyE
import java.awt.event.MouseA
import java.awt.event.MouseE
import java.awt.event.MouseL
import java.awt.image.BufferedI//java.awt 包含用于创建用户界面和绘制图形图像的所有类。
import java.io.IOE
import java.util.R
import javax.imageio.ImageIO;
import javax.swing.JF
import javax.swing.JP//BirdGame 继承 Jpanel 屏面
public class BirdGame extends JPanel {
Column column1,column2;//有上下两根柱子
/**游戏状态*/
// boolean gameO
public static final int START = 0;
public static final int RUNNING = 1;
public static final int GAME_OVER=2;
BufferedImage startI
BufferedImage gameOverI&
/**为该类添加构造方法,初始化属性变量*/
public BirdGame() throws Exception{
state =START;
// gameOver=
startImage = ImageIO.read(getClass().getResource(&start.png&));
gameOverImage=ImageIO.read(getClass().getResource(&gameover.png&));
bird = new Bird();
ground = new Ground();
column1 = new Column(1);
column2 = new Column(2);
background = ImageIO.read(getClass().getResource(&bg.png&));
/**重写print()方法用于为对象类贴图上去*/
public void paint(Graphics g){ //paint:画图,Graphics:图示符
g.drawImage(background,0,0,null);//用graphics绘制的draw的方法绘制时,默认绘制起点坐标为0,0
g.drawImage(column1.image,column1.x-column1.width/2,column1.y-column1.heigth/2,null);
g.drawImage(column2.image,column2.x-column2.width/2,column2.y-column2.heigth/2,null);
g.drawImage(ground.image,ground.x,ground.y,null);
g.drawImage(bird.image, bird.x-bird.width/2,bird.y-bird.heigth/2,null);
// Graphics2D g2=(Graphics2D)
// g2.rotate(-bird.alpha,bird.x,bird.y);
// g2.rotate(bird.alpha,bird.x,bird.y);
//在paint方法中绘制分数算法
Font f = new Font(Font.SANS_SERIF,Font.BOLD,20);//设置字体,粗细,大小
g.setColor(Color.WHITE);
g.setFont(f);
g.drawString(&score:&+score,20,50);//画分数
//添加游戏结束状态代码
// if (gameOver) {
// g.drawImage(gameOverImage, 0,0,null);
switch (state) {
case START:
g.drawImage(startImage,0,0,null);
case GAME_OVER:
g.drawImage(gameOverImage,0,0,null);
/**启动软件的方法main */
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame();//画游戏窗口的类
BirdGame game = new BirdGame();
frame.add(game);
frame.setSize(440,670);
frame.setLocationRelativeTo(null);//框架.设置 位置 相对应的 设置窗体初始位置(居中)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置 默认的 关闭 操作
frame.setVisible(true);//设置 可见的
game.action();
/**在BirdGame中添加Action方法(运动方法)*/
public void
action() throws Exception{
MouseAdapter l = new MouseAdapter(){ //鼠标注册事件监听&
public void mousePressed(MouseEvent e){ //定义鼠标按下时执行的方法
bird.flappy();
switch (state) {
case GAME_OVER:
column1 = new Column(1);
column2 = new Column(2);
bird = new Bird();
score = 0;
state=START;
case START:
state=RUNNING;
case RUNNING:
bird.flappy();
}catch(Exception ex){
ex.printStackTrace();
addMouseListener(l);//将L挂接到当前面板(game)上
while(true){
// if(!gameOver){
// ground.step();
// column1.step();
// column2.step();
// bird.step();
// if (bird.hit(ground) || bird.hit(column1) || bird.hit(column2)) {
// gameOver=
// //记分逻辑
// if(bird.x==column1.x || bird.x == column2.x){
// score++;
switch (state) {
case START:
ground.step();
case RUNNING:
column1.step();
column2.step();
ground.step();
bird.step();
if(bird.x==column1.x || bird.x == column2.x){
score++;
if (bird.hit(ground) || bird.hit(column1) || bird.hit(column2)) {
state = GAME_OVER;
repaint();//重画
Thread.sleep(1000/80);
/**对象:地面Ground*/
class Ground{
/**定义属性*/
BufferedI//该image属性是地面Gound类贴图
/**为该类添加构造方法,初始化属性*/
public Ground() throws Exception{
image = ImageIO.read(getClass().getResource(&ground.png&));
width = image.getWidth();
heigth = image.getHeight();
/**地面类的移动方法*/
public void step(){
if ( x == -109 ) {
/**对象:柱子Column*/
class Column {
/**定义属性*/
BufferedI//柱子Column 贴图
int width,
//两柱子间隙(上下)
//两柱子距离(左右)
/**为该类添加构造方法,初始化属性变量*/
Random random = new Random();
public Column(int n) throws Exception{ //为Column类编写带参数的构造方法。构造器:初始化数据,n代表第几个柱子
image=ImageIO.read(getClass().getResource(&column.png&));
width = image.getWidth();
heigth = image.getHeight();
gap = 144;//柱子上下间距
distance = 245;//柱子左右间距
x = 550+(n-1)*
y = random.nextInt(218)+132;
/**柱子类的移动方法*/&
public void step(){
if (x==-width/2) {
x=distance*2-width/2;
y=random.nextInt(218)+132;
/**对象:鸟bird*/
class Bird{
//定义属性
int width,
//鸟的大小用于碰撞检测
//在bird类中添加属性,计算鸟的位置
//重力加速度
//两次位置的间隔时间
double v0;//初始上抛速度
//当前上抛速度
//经过时间t后的位移
//鸟的倾斜度
/**为该类添加构造方法,初始化属性变量*/
public Bird() throws Exception{
image = ImageIO.read(getClass().getResource(&bird.png&));
width = image.getWidth();
heigth = image.getHeight();
size = 40;
//为计算鸟的位置的属性初始化
g=4; //重力加速度
//初始上抛速度
//两次位置的间隔时间
speed= v0; & //当前上抛速度
s=0; //经过时间t后的位移
//鸟的倾斜度
/**小鸟类的移动方法*/
public void step(){
double v0=
s=v0*t+g*t*t/2;//计算上抛运动位移
y=y-(int)s;//计算鸟的坐标位置
double v = v0-g*t;//计算下次的速度
// alpha=Math.atan(s/8);
public void flappy(){//重新设置初始速度,重新向上飞。
//检测鸟碰撞地面的方法
public boolean hit(Ground ground){
boolean hit = y+size/2&ground.y;
if (hit) {
y = ground.y-size/2;//鸟放到地面上
// alpha=-3.14159/2;
//检测鸟碰撞柱子的方法
public boolean hit(Column column){
if (x&column.x-column.width/2-size/2 && x&column.x+column.width/2+size/2) {//检测是否在柱子之间
if (y&column.y-column.gap/2+size/2 && y&column.y+column.gap/2-size/2) {//检测是否在缝隙之中
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:415次
排名:千里之外

我要回帖

更多关于 java编写游戏 的文章

 

随机推荐