求java经典小项目代码 及思想 QQ:272545858
发布网友
发布时间:2023-07-12 12:22
我来回答
共1个回答
热心网友
时间:2024-11-29 01:52
好吧,给你一个我写的贪吃蛇吧:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
public class 贪吃蛇 extends JFrame implements ActionListener, KeyListener,
Runnable {
private static final long serialVersionUID = 1L;
private JMenuBar 上面的菜单条子;
private JMenu 游戏菜单项, 分数菜单项;
private JMenuItem 开始游戏选项, 退出游戏选项, 最高分数选项;
private int 蛇长 = 6;
private Toolkit 默认声音工具;
private int 蛇长的中间量, 蛇头x, 蛇头y, 按键指令1上2下3左4右, 食物X坐标, 食物Y坐标, 食物存在否 = 0,
是否吃到食物 = 0, 刷帧时间;
private int 蛇的各模块x坐标[] = new int[50];
private int 蛇的各模块y坐标[] = new int[50];
private Thread 开始游戏线程 = null;
private int 分数 = 0;
private int 吃掉的食物 = 0;
private int 最高分数 = 0;
private Random r = new Random();
private Color c;
public void run() {
刷帧时间 = 500;
for (蛇长的中间量 = 0; 蛇长的中间量 <= 蛇长 - 1; 蛇长的中间量++) {
蛇的各模块x坐标[蛇长的中间量] = 90 - 蛇长的中间量 * 10;
蛇的各模块y坐标[蛇长的中间量] = 60;
}
蛇头x = 蛇的各模块x坐标[0];
蛇头y = 蛇的各模块y坐标[0];
按键指令1上2下3左4右 = 4;
while (开始游戏线程 != null) {
每帧执行();
try {
Thread.sleep(刷帧时间);
} catch (Exception ee) {
System.out.println(按键指令1上2下3左4右 + "");
}
}
}
public 贪吃蛇() {
setVisible(true);
上面的菜单条子 = new JMenuBar();
默认声音工具 = getToolkit();
游戏菜单项 = new JMenu("游戏");
开始游戏选项 = new JMenuItem("开始游戏");
退出游戏选项 = new JMenuItem("退出游戏");
分数菜单项 = new JMenu("积分排行");
最高分数选项 = new JMenuItem("最高记录");
分数菜单项.add(最高分数选项);
游戏菜单项.add(开始游戏选项);
游戏菜单项.add(退出游戏选项);
上面的菜单条子.add(游戏菜单项);
上面的菜单条子.add(分数菜单项);
开始游戏选项.addActionListener(this);
退出游戏选项.addActionListener(this);
addKeyListener(this);
最高分数选项.addActionListener(this);
KeyStroke 开始游戏快捷键 = KeyStroke.getKeyStroke('O',
InputEvent.CTRL_DOWN_MASK);
开始游戏选项.setAccelerator(开始游戏快捷键);
//
KeyStroke 退出游戏快捷键 = KeyStroke.getKeyStroke('X',
InputEvent.CTRL_DOWN_MASK);
退出游戏选项.setAccelerator(退出游戏快捷键);
setJMenuBar(上面的菜单条子);
setTitle("贪吃蛇");
setResizable(false);
setBounds(300, 200, 400, 400);
validate();
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new 贪吃蛇();
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == 开始游戏选项) {
蛇长 = 6;
分数 = 0;
吃掉的食物 = 0;
if (开始游戏线程 == null) {
开始游戏线程 = new Thread(this);
开始游戏线程.start();
} else if (开始游戏线程 != null) {
开始游戏线程 = null;
开始游戏线程 = new Thread(this);
开始游戏线程.start();
}
}
if (e.getSource() == 退出游戏选项) {
System.exit(0);
}
if (e.getSource() == 最高分数选项) {
JOptionPane.showMessageDialog(this, "最高记录为" + 最高分数 + "");
}
}
public void 每帧执行() {
挂没挂();
if (开始游戏线程 != null) {
if (是否吃到食物 == 0) {
刷新蛇各点();
} else {
蛇吃掉了食物方法();
}
if (蛇头x == 食物X坐标 && 蛇头y == 食物Y坐标) {
食物存在否 = 0;
是否吃到食物 = 1;
默认声音工具.beep();
c = new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255));
}
if (食物存在否 == 0) {
食物存在否 = 1;
食物X坐标 = (int) Math.floor(Math.random() * 39) * 10;
食物Y坐标 = (int) Math.floor(Math.random() * 29) * 10 + 50;
}
this.repaint();
}
}
void 挂没挂() {
if (按键指令1上2下3左4右 == 4) {
蛇头x = 蛇头x + 10;
} else if (按键指令1上2下3左4右 == 3) {
蛇头x = 蛇头x - 10;
} else if (按键指令1上2下3左4右 == 2) {
蛇头y = 蛇头y + 10;
} else if (按键指令1上2下3左4右 == 1) {
蛇头y = 蛇头y - 10;
}
if (蛇头x < 0 || 蛇头x > 390 || 蛇头y < 50 || 蛇头y > 390) {
开始游戏线程 = null;
}
for (蛇长的中间量 = 1; 蛇长的中间量 < 蛇长; 蛇长的中间量++) {
if (蛇的各模块x坐标[蛇长的中间量] == 蛇头x && 蛇的各模块y坐标[蛇长的中间量] == 蛇头y) {
开始游戏线程 = null;
}
}
}
public void 蛇吃掉了食物方法() {
if (蛇长 < 50) {
蛇长++;
}
是否吃到食物--;
刷帧时间 = 刷帧时间 - 10;
刷新蛇各点();
分数 += 100;
if (最高分数 < 分数) {
最高分数 = 分数;
}
吃掉的食物++;
}
public void 刷新蛇各点() {
for (蛇长的中间量 = 蛇长 - 1; 蛇长的中间量 > 0; 蛇长的中间量--) {
蛇的各模块x坐标[蛇长的中间量] = 蛇的各模块x坐标[蛇长的中间量 - 1];
蛇的各模块y坐标[蛇长的中间量] = 蛇的各模块y坐标[蛇长的中间量 - 1];
}
if (按键指令1上2下3左4右 == 4) {
蛇的各模块x坐标[0] = 蛇的各模块x坐标[0] + 10;
}
if (按键指令1上2下3左4右 == 3) {
蛇的各模块x坐标[0] = 蛇的各模块x坐标[0] - 10;
}
if (按键指令1上2下3左4右 == 2) {
蛇的各模块y坐标[0] = 蛇的各模块y坐标[0] + 10;
}
if (按键指令1上2下3左4右 == 1) {
蛇的各模块y坐标[0] = 蛇的各模块y坐标[0] - 10;
}
}
public void keyPressed(KeyEvent e) {
if (开始游戏线程 != null) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
if (按键指令1上2下3左4右 != 2) {
按键指令1上2下3左4右 = 1;
每帧执行();
}
} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
if (按键指令1上2下3左4右 != 1) {
按键指令1上2下3左4右 = 2;
每帧执行();
}
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
if (按键指令1上2下3左4右 != 4) {
按键指令1上2下3左4右 = 3;
每帧执行();
}
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
if (按键指令1上2下3左4右 != 3) {
按键指令1上2下3左4右 = 4;
每帧执行();
}
}
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public void paint(Graphics g) {
g.fillRect(0, 0, 400, 400);
g.setColor(Color.green);
for (蛇长的中间量 = 0; 蛇长的中间量 <= 蛇长 - 1; 蛇长的中间量++) {
g.fillRect(蛇的各模块x坐标[蛇长的中间量], 蛇的各模块y坐标[蛇长的中间量], 10, 10);
}
g.setColor(c);
g.fillRect(食物X坐标, 食物Y坐标, 10, 10);
g.setColor(Color.white);
g.drawString("当前 分数" + this.分数, 6, 60);
g.drawString("当前已吃食物数" + this.吃掉的食物, 6, 72);
}
}
看懂了基本就算是java入门了。
思想的话看Thinking in Java这本书,看时一定一定要有耐心,看不懂继续看,看完帮助很大