java swing游戏开发_如何在java项目中利用swing框架实现一个贪吃蛇游戏

如何在java项目中利用swing框架实现一个贪吃蛇游戏

发布时间:2020-12-18 14:17:45

来源:亿速云

阅读:91

作者:Leah

本篇文章给大家分享的是有关如何在java项目中利用swing框架实现一个贪吃蛇游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1、编写main方法package game;

import java.awt.Graphics;

import javax.swing.*;

public class snakeMain extends JFrame {

public snakeMain() {

snakeWin win = new snakeWin();

add(win);

setTitle("̰贪吃蛇v1.0");

setSize(435,390);

setLocation(200, 200);

setVisible(true);

}

public static void main(String[] args) {

new snakeMain();

}

}

2、编写实体类package game;

public class snakeAct {

private int x;

private int 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;

}

}

3、编写主要程序package game;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.util.*;

import java.util.List;

public class snakeWin extends JPanel implements ActionListener,KeyListener,Runnable{

int fenShu=0,Speed=0;

boolean start = false;

int rx=0,ry=0;

int eat1=0,eat2=0;

JDialog dialog = new JDialog();

JLabel label = new JLabel("你挂了!你的分数"+fenShu+"");

JButton ok = new JButton("T_T");

Random r = new Random();

JButton newGame,stopGame;

List list = new ArrayList();

int temp=0;

Thread nThread;

public snakeWin() {

newGame = new JButton("开始");

stopGame = new JButton("结束");

newGame.addActionListener(this);

stopGame.addActionListener(this);

this.addKeyListener(this);

this.setLayout(new FlowLayout(FlowLayout.LEFT));

this.add(newGame);

this.add(stopGame);

dialog.setLayout(new GridLayout(2, 1));

dialog.add(label);

dialog.add(ok);

dialog.setSize(200, 200);

dialog.setLocation(200, 200);

dialog.setVisible(false);

ok.addActionListener(this);

}

public void paintComponent(Graphics g){

super.paintComponent(g);

g.drawRect(10, 40, 400, 300);

g.drawString("分数"+fenShu, 150, 15);

g.drawString("速度"+Speed, 150, 35);

g.setColor(new Color(0, 255, 0));

if(start){

g.fillRect(10+rx*10, 40+ry*10, 10, 10);

for (int i = 0; i 

g.setColor(new Color(0, 0, 255));

g.fillRect(10+list.get(i).getX()*10, 40+list.get(i).getY()*10, 10, 10);

}

}

}

public void actionPerformed(ActionEvent e) {

if(e.getSource()==newGame){

newGame.setEnabled(false);

start = true;

rx=r.nextInt(40);ry=r.nextInt(30);

snakeAct tempAct = new snakeAct();

tempAct.setX(20);

tempAct.setY(15);

list.add(tempAct);

this.requestFocus();

nThread = new Thread(this);

nThread.start();

repaint();

}

if(e.getSource()==stopGame){

System.exit(0);

}

if(e.getSource()==ok){

list.clear();

start=false;

newGame.setEnabled(true);

dialog.setVisible(false);

fenShu=0;

Speed=0;

repaint();

}

}

private void eat() {

if (rx==list.get(0).getX()&&ry==list.get(0).getY()) {

rx = r.nextInt(40);ry = r.nextInt(30);

snakeAct tempAct = new snakeAct();

tempAct.setX(list.get(list.size()-1).getX());

tempAct.setY(list.get(list.size()-1).getY());

list.add(tempAct);

fenShu = fenShu+100*Speed+10;

eat1++;

if(eat1-eat2>=4){

eat2=eat1;

Speed++;

}

}

}

public void otherMove(){

snakeAct tempAct = new snakeAct();

for (int i = 0; i 

if (i==1) {

list.get(i).setX(list.get(0).getX());

list.get(i).setY(list.get(0).getY());

}else if(i>1){

tempAct=list.get(i-1);

list.set(i-1, list.get(i));

list.set(i, tempAct);

}

}

}

public void move(int x,int y){

if (minYes(x, y)) {

otherMove();

list.get(0).setX(list.get(0).getX()+x);

list.get(0).setY(list.get(0).getY()+y);

eat();

repaint();

}else {

nThread = null;

label.setText("你挂了!你的分数"+fenShu+"");

dialog.setVisible(true);

}

}

public boolean minYes(int x,int y){

if (!maxYes(list.get(0).getX()+x,list.get(0).getY()+ y)) {

return false;

}

return true;

}

public boolean maxYes(int x,int y){

if (x<0||x>=40||y<0||y>=30) {

return false;

}

for (int i = 0; i 

if (i>1&&list.get(0).getX()==list.get(i).getX()&&list.get(0).getY()==list.get(i).getY()) {

return false;

}

}

return true;

}

public void keyPressed(KeyEvent e) {

if(start){

switch (e.getKeyCode()) {

case KeyEvent.VK_UP:

move(0, -1);

temp=1;

break;

case KeyEvent.VK_DOWN:

move(0, 1);

temp=2;

break;

case KeyEvent.VK_LEFT:

move(-1, 0);

temp=3;

break;

case KeyEvent.VK_RIGHT:

move(1, 0);

temp=4;

break;

default:

break;

}

}

}

public void keyReleased(KeyEvent e) {}

public void keyTyped(KeyEvent e) {}

public void run() {

while (start) {

switch (temp) {

case 1:

move(0, -1);

break;

case 2:

move(0, 1);

break;

case 3:

move(-1, 0);

break;

case 4:

move(1, 0);

break;

default:

break;

}

repaint();

try {

Thread.sleep(300-30*Speed);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

以上就是如何在java项目中利用swing框架实现一个贪吃蛇游戏,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值