java简易小游戏[通俗易懂]

java简易小游戏[通俗易懂]java简易小游戏制作游戏思路:设置人物移动,游戏规则,积分系统,随机移动的怪物,游戏胜负判定,定时器。游戏内容部分package代码部分;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyEvent;importjava.awt.event.KeyListener;

大家好,又见面了,我是你们的朋友全栈君。

java简易小游戏制作

游戏思路:设置人物移动,游戏规则,积分系统,随机移动的怪物,游戏胜负判定,定时器。

游戏内容部分

package 代码部分;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
public class TestGamePanel extends JPanel implements KeyListener, ActionListener { 

//初始化人物坐标
int p1X;
int p1Y;
int p2X;
int p2Y;
boolean isStart = false;    //游戏是否开始
boolean p1isFail = false;     //游戏是否失败
boolean p2isFail = false;
String fx1;         //左:L, 右:R, 上:U, 下:D
String fx2;
Timer timer = new Timer(50,this);//定时器
//积分
int p1score = 0;
int p2score = 0;
//苹果
int AppleX;
int AppleY;
//怪物
int monster1X;
int monster1Y;
int monster2X;
int monster2Y;
int monster3X;
int monster3Y;
int monster4X;
int monster4Y;
int monster5X;
int monster5Y;
//随机积分
Random random = new Random();
public TestGamePanel() { 

init();
this.setFocusable(true);
this.addKeyListener(this);
timer.start();
}
//初始化
public void init() { 

p1X = 25;
p1Y = 150;
p2X = 700;
p2Y = 550;
fx1 = "L";
fx2 = "R";
monster1X = 25*random.nextInt(28);
monster1Y = 100 + 25*random.nextInt(18);
monster2X = 25*random.nextInt(28);
monster2Y = 100 + 25*random.nextInt(18);
monster3X = 25*random.nextInt(28);
monster3Y = 100 + 25*random.nextInt(18);
monster4X = 25*random.nextInt(28);
monster4Y = 100 + 25*random.nextInt(18);
monster5X = 25*random.nextInt(28);
monster5Y = 100 + 25*random.nextInt(18);
AppleX = 25*random.nextInt(28);
AppleY = 100 + 25*random.nextInt(18);
add(kaishi);
add(chongkai);
guize.addActionListener(new ActionListener() { 

@Override
public void actionPerformed(ActionEvent e) { 

new TestGameRule();
}
});
}
//游戏功能按钮
JButton kaishi = new JButton("开始");
JButton chongkai = new JButton("重新开始");
JButton guize = new JButton("游戏规则");
//画板
@Override
protected void paintComponent(Graphics g) { 

super.paintComponent(g);
TestGameData.header.paintIcon(this,g,0,0);
g.setColor(Color.CYAN);
g.fillRect(0,100,780,520);
//画人物
TestGameData.p1player1.paintIcon(this,g,p1X,p1Y);
TestGameData.p2player1.paintIcon(this,g,p2X,p2Y);
//画得分
g.setFont(new Font("华文彩云",Font.BOLD,18));  //设置字体
g.setColor(Color.RED);
g.drawString("玩家1:" + p1score,20,20 );
g.drawString("玩家2:" + p2score,680,20);
//画苹果
TestGameData.apple.paintIcon(this,g,AppleX,AppleY);
//画静态怪物
TestGameData.monster.paintIcon(this,g,monster1X,monster1Y);
TestGameData.monster.paintIcon(this,g,monster2X,monster2Y);
TestGameData.monster.paintIcon(this,g,monster3X,monster3Y);
TestGameData.monster.paintIcon(this,g,monster4X,monster4Y);
TestGameData.monster.paintIcon(this,g,monster5X,monster5Y);
//游戏提示,是否开始
if(!isStart) { 

g.setColor(Color.BLACK);
g.setFont(new Font("华文彩云",Font.BOLD,30));
g.drawString("请点击开始游戏",300,300);
}
//游戏结束提示,是否重新开始
if(p2isFail || p1score == 15) { 

g.setColor(Color.RED);
g.setFont(new Font("华文彩云",Font.BOLD,30));
g.drawString("玩家一获胜,请点击重新开始游戏",200,300);
}
if(p1isFail || p2score == 15) { 

g.setColor(Color.RED);
g.setFont(new Font("华文彩云",Font.BOLD,30));
g.drawString("玩家二获胜,请点击重新开始游戏",200,300);
}
}
//键盘监听事件
@Override
public void keyPressed(KeyEvent e) { 

//控制人物走动
//玩家1
if(isStart == true && (p1isFail == false && p2isFail == false)) { 

if(e.getKeyCode() == KeyEvent.VK_D) { 

fx1 = "R";
p1X += 25;
if(p1X >= 750) { 
p1X = 750;}
}
else if(e.getKeyCode() == KeyEvent.VK_A) { 

fx1 = "L";
p1X -= 25;
if(p1X <= 0) { 
p1X = 0;}
}
else if(e.getKeyCode() == KeyEvent.VK_W) { 

fx1 = "U";
p1Y -= 25;
if(p1Y <= 100) { 
p1Y = 100;}
}
else if(e.getKeyCode() == KeyEvent.VK_S) { 

fx1 = "D";
p1Y += 25;
if(p1Y >= 600) { 
p1Y = 600;}
}
//玩家2
if(e.getKeyCode() == KeyEvent.VK_RIGHT) { 

fx2 = "R";
p2X += 25;
if(p2X >= 750) { 
p2X = 750;}
}
else if(e.getKeyCode() == KeyEvent.VK_LEFT) { 

fx2 = "L";
p2X -= 25;
if(p2X <= 0) { 
p2X = 0;}
}
else if(e.getKeyCode() == KeyEvent.VK_UP) { 

fx2 = "U";
p2Y -= 25;
if(p2Y <= 100) { 
p2Y = 100;}
}
else if(e.getKeyCode() == KeyEvent.VK_DOWN) { 

fx2 = "D";
p2Y += 25;
if(p2Y >= 600) { 
p2Y = 600;}
}
}
repaint();
}
@Override
public void actionPerformed(ActionEvent e) { 

kaishi.addActionListener(new ActionListener() { 

@Override
public void actionPerformed(ActionEvent e) { 

isStart = true;
}
});
chongkai.addActionListener(new ActionListener() { 

@Override
public void actionPerformed(ActionEvent e) { 

if(p1isFail) { 
 p1isFail = !p1isFail; init(); }
if(p2isFail) { 
 p2isFail = !p2isFail; init(); }
}
});
add(kaishi);
add(chongkai);
add(guize);
if(isStart == true && (p1isFail == false && p2isFail == false)) { 

//让人动起来
if(fx1.equals("R")) { 

p1X += 25;
if(p1X >= 750) { 
 p1X = 750; }
}
if(fx1.equals("L")) { 

p1X -= 25;
if(p1X <= 0) { 
 p1X = 0; }
}
if(fx1.equals("U")) { 

p1Y -= 25;
if(p1Y <= 100) { 
 p1Y = 100; }
}
if(fx1.equals("D")) { 

p1Y += 25;
if(p1Y >= 600) { 
 p1Y = 600; }
}
if(fx2.equals("R")) { 

p2X += 25;
if(p2X >= 750) { 
 p2X = 750; }
}
if(fx2.equals("L")) { 

p2X -= 25;
if(p2X <= 0) { 
 p2X = 0; }
}
if(fx2.equals("U")) { 

p2Y -= 25;
if(p2Y <= 100) { 
 p2Y = 100; }
}
if(fx2.equals("D")) { 

p2Y += 25;
if(p2Y >= 600) { 
 p2Y = 600; }
}
//让怪物动起来
//怪物1
int i = random.nextInt(4) + 1;
if(i == 1) { 

monster1X += 5;
if(monster1X >= 750) { 
monster1X = 750;}
}
if(i == 2) { 

monster1X -= 5;
if(monster1X <= 0) { 
monster1X = 0;}
}
if(i == 3) { 

monster1Y += 5;
if(monster1Y >= 600) { 
monster1Y = 600;}
}
if(i == 4) { 

monster1Y -= 5;
if(monster1Y <= 100) { 
monster1Y = 100;}
}
//怪物2
int j = random.nextInt(4) + 1;
if(j == 1) { 

monster2X += 5;
if(monster2X >= 750) { 
monster2X = 750;}
}
if(j == 2) { 

monster2X -= 5;
if(monster2X <= 0) { 
monster2X = 0;}
}
if(j == 3) { 

monster2Y += 5;
if(monster2Y >= 600) { 
monster2Y = 600;}
}
if(j == 4) { 

monster2Y -= 5;
if(monster2Y <= 100) { 
monster2Y = 100;}
}
//怪物3
int k = random.nextInt(4) + 1;
if(k == 1) { 

monster3X += 5;
if(monster3X >= 750) { 
monster3X = 750;}
}
if(k == 2) { 

monster3X -= 5;
if(monster3X <= 0) { 
monster3X = 0;}
}
if(k == 3) { 

monster3Y += 5;
if(monster3Y >= 600) { 
monster3Y = 600;}
}
if(k == 4) { 

monster3Y -= 5;
if(monster3Y <= 100) { 
monster3Y = 100;}
}
//怪物4
int n= random.nextInt(4) + 1;
if(n == 1) { 

monster4X += 5;
if(monster4X >= 750) { 
monster4X = 750;}
}
if(n == 2) { 

monster4X -= 5;
if(monster4X <= 0) { 
monster4X = 0;}
}
if(n == 3) { 

monster4Y += 5;
if(monster4Y >= 600) { 
monster4Y = 600;}
}
if(n == 4) { 

monster4Y -= 5;
if(monster4Y <= 100) { 
monster4Y = 100;}
}
//怪物5
int m = random.nextInt(4) + 1;
if(m == 1) { 

monster5X += 5;
if(monster5X >= 750) { 
monster5X = 750;}
}
if(m == 2) { 

monster5X -= 5;
if(monster5X <= 0) { 
monster5X = 0;}
}
if(m == 3) { 

monster5Y += 5;
if(monster5Y >= 600) { 
monster5Y = 600;}
}
if(m == 4) { 

monster5Y -= 5;
if(monster5Y <= 100) { 
monster5Y = 100;}
}
//如果有玩家吃到食物
if(p1X == AppleX && p1Y == AppleY) { 

p1score++;
AppleX = 25*random.nextInt(28);
AppleY = 100 + 25*random.nextInt(18);
} else if(p2X == AppleX && p2Y == AppleY) { 

p2score++;
AppleX = 25*random.nextInt(28);
AppleY = 100 + 25*random.nextInt(18);
}
//如果有玩家碰到怪物,判定死亡,游戏结束 后续有修改,暂用
//怪物1死亡
if(p1X >= monster1X -25 && p1X <= monster1X +25) { 

if(p1Y == monster1Y) { 
 p1isFail = !p1isFail; p1score = p2score = 0;}
}
if(p1Y >= monster1Y -25 && p1Y <= monster1Y +25) { 

if(p1X == monster1X) { 
 p1isFail = !p1isFail; p1score = p2score = 0;}
}
if(p2X >= monster1X -25 && p2X <= monster1X +25) { 

if(p2Y == monster1Y) { 
 p2isFail = !p2isFail; p1score = p2score = 0;}
}
if(p2Y >= monster1Y -25 && p2Y <= monster1Y +25) { 

if(p2X == monster1X) { 
 p2isFail = !p2isFail; p1score = p2score = 0;}
}
//怪物2死亡
if(p1X >= monster2X -25 && p1X <= monster2X +25) { 

if(p1Y == monster2Y) { 
 p1isFail = !p1isFail; p1score = p2score = 0;}
}
if(p1Y >= monster2Y -25 && p1Y <= monster2Y +25) { 

if(p1X == monster2X) { 
 p1isFail = !p1isFail; p1score = p2score = 0;}
}
if(p2X >= monster2X -25 && p2X <= monster2X +25) { 

if(p2Y == monster2Y) { 
 p2isFail = !p2isFail; p1score = p2score = 0;}
}
if(p2Y >= monster2Y -25 && p2Y <= monster2Y +25) { 

if(p2X == monster2X) { 
 p2isFail = !p2isFail; p1score = p2score = 0;}
}
//怪物3死亡
if(p1X >= monster3X -25 && p1X <= monster3X +25) { 

if(p1Y == monster3Y) { 
 p1isFail = !p1isFail; p1score = p2score = 0;}
}
if(p1Y >= monster3Y -25 && p1Y <= monster3Y +25) { 

if(p1X == monster3X) { 
 p1isFail = !p1isFail; p1score = p2score = 0;}
}
if(p2X >= monster3X -25 && p2X <= monster3X +25) { 

if(p2Y == monster3Y) { 
 p2isFail = !p2isFail; p1score = p2score = 0;}
}
if(p2Y >= monster3Y -25 && p2Y <= monster3Y +25) { 

if(p2X == monster3X) { 
 p2isFail = !p2isFail; p1score = p2score = 0;}
}
//怪物4死亡
if(p1X >= monster4X -25 && p1X <= monster4X +25) { 

if(p1Y == monster4Y) { 
 p1isFail = !p1isFail; p1score = p2score = 0;}
}
if(p1Y >= monster4Y -25 && p1Y <= monster4Y +25) { 

if(p1X == monster1X) { 
 p1isFail = !p1isFail; p1score = p2score = 0;}
}
if(p2X >= monster4X -25 && p2X <= monster4X +25) { 

if(p2Y == monster4Y) { 
 p2isFail = !p2isFail; p1score = p2score = 0;}
}
if(p2Y >= monster4Y -25 && p2Y <= monster4Y +25) { 

if(p2X == monster4X) { 
 p2isFail = !p2isFail; p1score = p2score = 0;}
}
//怪物5死亡
if(p1X >= monster5X -25 && p1X <= monster5X +25) { 

if(p1Y == monster5Y) { 
 p1isFail = !p1isFail; p1score = p2score = 0;}
}
if(p1Y >= monster5Y -25 && p1Y <= monster5Y +25) { 

if(p1X == monster5X) { 
 p1isFail = !p1isFail; p1score = p2score = 0;}
}
if(p2X >= monster5X -25 && p2X <= monster5X +25) { 

if(p2Y == monster5Y) { 
 p2isFail = !p2isFail; p1score = p2score = 0;}
}
if(p2Y >= monster5Y -25 && p2Y <= monster5Y+25) { 

if(p2X == monster5X) { 
 p2isFail = !p2isFail; p1score = p2score = 0;}
}
//如果有玩家达到指定积分,判定获胜,游戏结束
if(p1score == 15) { 
 p2isFail = !p2isFail; }
if(p2score == 15) { 
 p1isFail = !p1isFail; }
repaint();
}
timer.start();
}
@Override
public void keyTyped(KeyEvent e) { 

}
@Override
public void keyReleased(KeyEvent e) { 

}
}

游戏规则(使用弹窗)部分

package 代码部分;
import javax.swing.*;
import java.awt.*;
public class TestGameRule extends JDialog { 

private int num = 1;
public TestGameRule() { 

TextArea textArea = new TextArea(20,10);
textArea.setText("游戏中有五个怪物随机移动,碰到怪物算死亡\\\n游戏中有随机出现的苹果,碰到一个苹果加一分,\\\n先达到十五分或者对手死亡算游戏胜利!");
JScrollPane jScrollPane = new JScrollPane(textArea);
this.add(jScrollPane);
this.setBounds(200,200,400,400);
this.setVisible(true);
textArea.setEditable(false);
setResizable(false);
textArea.setBackground(Color.PINK);
}
}

图片素材

package 代码部分;
import javax.swing.*;
import java.net.URL;
public class TestGameData { 

public static URL headerurl = TestGameData.class.getResource("/图片素材/header.jpg");
public static URL p1player1url = TestGameData.class.getResource("/图片素材/1.jpg");
public static URL p2player2url = TestGameData.class.getResource("/图片素材/2.jpg");
public static URL appleurl = TestGameData.class.getResource("/图片素材/apple.jpg");
public static URL monsterurl = TestGameData.class.getResource("/图片素材/monster.jpg");
public static ImageIcon p1player1 = new ImageIcon(p1player1url);
public static ImageIcon p2player1 = new ImageIcon(p2player2url);
public static ImageIcon header = new ImageIcon(headerurl);
public static ImageIcon apple = new ImageIcon(appleurl);
public static ImageIcon monster = new ImageIcon(monsterurl);
}

主函数

package 代码部分;
import javax.swing.*;
public class TestStartGame { 

public static void main(String[] args) { 

//制作窗口
JFrame jFrame = new JFrame("2D对战小游戏");
jFrame.setBounds(10,10,790,660);
jFrame.setResizable(false);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//添加游戏面板
jFrame.add(new TestGamePanel());
//设置可见
jFrame.setVisible(true);
}
}

实现效果
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158962.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 数据绑定中的一个问题”pages enableEventValidation=”true””[通俗易懂]

    数据绑定中的一个问题”pages enableEventValidation=”true””[通俗易懂]我们在用vs2005做数据绑定的时候运行出来的回发或回调参数无效。在配置中使用<pagesenableEventValidation=”true”/>或在页面中使用<%@PageEnableEventValidation=”true”%>启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据…

  • matlab求解高阶常微分方程_状态依赖时滞微分方程的动力学研究

    matlab求解高阶常微分方程_状态依赖时滞微分方程的动力学研究**前言:**大学期间只学习过《常微分方程》,没想到有些学校竟然还学《时滞微分方程》,于是找到一本由内藤敏机(日本)等著,马万彪等译的《时滞微分方程——泛函数微分方程引论》(有需要的可以私聊,CSDN貌似上传不了书籍,说侵权emmm),看着头秃,不过受到不少启发,尤其是对Logistic方程的改进,真真是长见识了。没找到有人用欧拉法解一阶时滞微分方程的,于是一不做二不休便用MATLAB实现了一下下…

  • 木马免杀方式_木马入侵的常见方法

    木马免杀方式_木马入侵的常见方法前言免杀,又叫免杀毒技术,是反病毒,反间谍的对立面,是一种能使病毒或木马免于被杀毒软件查杀的软件。它除了使病毒木马免于被查杀外,还可以扩增病毒木马的功能,改变病毒木马的行为。免杀的基本特征是破坏特征,有可能是行为特征,只要破坏了病毒与木马所固有的特征,并保证其原有功能没有改变,一次免杀就能完成了。免杀技术也并不是十恶不赦的,例如,在软件保护所用的加密产品(比如壳)中,有一些会被杀毒软件认为是木马病毒;一些安全领域中的部分安全检测产品,也会被杀毒软件误杀,这时就需要免杀技术来应对这些不稳定因素。1、裸

  • hdu1281 棋盘游戏 二分图最大匹配

    hdu1281 棋盘游戏 二分图最大匹配

  • mysql全文索引实现搜索功能(关键词查询)

    mysql全文索引实现搜索功能(关键词查询)最近在做一个关键词查询功能。所以开始了解mysql的全文索引技术。接下来我将一步一步告诉大家。我是如何一步一步实现关键词检索的。1.了解到mysql全文检索是以词为基础的。MySQL默认的分词是所有非字母和数字的特殊符号都是分词符。所以我存在数据库的样子是这样的。(左边的字段用于显示,右边的字段用于全文查询)2.全文检索的sqlSELECT*FROMtbk_item_coupon…

  • journalctl命令详解,与如何查看系统日志

    journalctl命令详解,与如何查看系统日志journalctl可以查看所有的系统日志文件,由于日志信息量很大,journalctl还提供了各种参数帮助用户更快速的定位到日志信息。默认情况下,用户都可以访问自己的日志。对于系统主日志和其他用户的日志,仅限于有权限的用户访问,比如root用户,wheel组和systemd组的用户。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号