主要运用java初期的面板,面容,面向对象,键盘监听,以及多线程实现动画等的方法。(本人初期小白有语法赘余之处还请谅解,欢迎提出批评指正)

如有问题也可私信问我


需要创建的类:
1.面板:JFrame
2.面容:Panel
3.人物:actor
4.粑粑:bianbian
5.血条:Health
6.游戏结束:gameOver

1.面板类 

package secondGame;import javax.swing.*;
import java.awt.*;/*
需要创建的类:
1.面板:JFrame
2.面容:Panel
3.人物:actor
4.粑粑:bianbian
5.血条:Health
6.游戏结束:gameOver*/
public class Game extends JFrame {public static void main(String[] args) {JFrame frame = new JFrame();gamePanel panel = new gamePanel();frame.setTitle("屎王争霸赛");frame.setSize(1360,670);frame.setLocationRelativeTo(null);frame.add(panel);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);panel.requestFocus();//创建焦点,使监听起作用Thread thread = new Thread(panel);//实例化线程thread.start();//开始线程}
}

2.面容类

package secondGame;import com.softeem.game.util.ImageUtil;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;public class gamePanel extends JPanel implements Runnable{BufferedImage bg = ImageUtil.getPath("/images/背景.png");Boolean flag = true;public gamePanel () {//创建键盘适配器KeyAdapter adapter = new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {super.keyPressed(e);//定义code,使其获取键盘按下的键int code = e.getKeyCode();if (code == KeyEvent.VK_UP) {if (actor.y >= 280) {actor.y -= 40;}}if (code == KeyEvent.VK_DOWN) {if (actor.y <= 480) {actor.y += 40;}}if (code == KeyEvent.VK_LEFT) {actor.dir = 0;if (actor.x >= 40) {actor.x -= 40;}}if (code == KeyEvent.VK_RIGHT) {actor.dir = 1;if (actor.x <= 1220) {actor.x += 40;}}if (code == KeyEvent.VK_SPACE) {if (actor.x <= 1180 && actor.dir == 1) {actor.x += 80;}}if (code == KeyEvent.VK_SPACE) {if (actor.x >= 80 && actor.dir == 0) {actor.x -= 80;}}repaint();}};addKeyListener(adapter);//将适配器加入到监听器中}//实例化相关对象Actor actor = new Actor();Health health = new Health();Baba baba = new Baba();Baba1 baba1 = new Baba1();Baba2 baba2 = new Baba2();Baba3 baba3 = new Baba3();Baba4 baba4 = new Baba4();gameOver gameOver = new gameOver();//paint方法,在面容中将图片画出public void paint(Graphics g){g.drawImage(bg,0,0,null);g.drawImage(actor.img,actor.x,actor.y,actor.w,actor.h,null);g.drawImage(health.img, health.x,health.y,health.w,health.h,null);g.drawImage(baba.img, baba.x, baba.y, baba.w, baba.h, null);g.drawImage(baba1.img, baba1.x, baba1.y, baba1.w, baba1.h, null);g.drawImage(baba2.img, baba2.x, baba2.y, baba2.w, baba2.h, null);g.drawImage(baba3.img, baba3.x, baba3.y, baba3.w, baba3.h, null);g.drawImage(baba4.img, baba4.x, baba4.y, baba4.w, baba4.h, null);//总分数int Sum;//每个粑粑的分数不一样Sum = baba.sum + baba1.sum + baba2.sum + baba3.sum + baba4.sum;//当结束时根据不同分数绘画出不同等级if (health.x < -1360){if(Sum < 40){g.drawImage(gameOver.img1,gameOver.x1,gameOver.y1,gameOver.w1,gameOver.h1,null);}if(Sum >= 40 && Sum < 90){g.drawImage(gameOver.img2,gameOver.x2,gameOver.y2,gameOver.w2,gameOver.h2,null);}if(Sum >= 90 && Sum < 150){g.drawImage(gameOver.img3,gameOver.x3,gameOver.y3,gameOver.w3,gameOver.h3,null);}if(Sum >= 150){g.drawImage(gameOver.img4,gameOver.x4,gameOver.y4,gameOver.w4,gameOver.h4,null);}}}//线程,重写run方法public void run(){while (flag){//控制粑粑下落,不同粑粑下落速度不一样baba.y += 3;baba1.y += 4;baba2.y += 5;baba3.y += 6;baba4.y += 7;//控制血条减少health.x -= 2;//当粑粑超出界限时重新生成粑粑if(baba.y>=560){baba.appear();baba.y = -10;}if(baba1.y>=560){baba1.appear();baba1.y = -10;}if(baba2.y>=560){baba2.appear();baba2.y = -10;}if(baba3.y>=560){baba3.appear();baba3.y = -10;}if(baba4.y>=560){baba4.appear();baba4.y = -10;}/*粑粑图片的高20,长20;人物图片的高80,长80;1、 判断人物是否吃到粑粑2、吃到不同的粑粑会加不同的生命值*/if (baba.y>actor.y-20 && baba.y<actor.y+80){if (baba.x>=actor.x-17 && baba.x<=actor.x+77){baba.remove();//移除粑粑health.x += 10;//增加生命}}if (baba1.y>actor.y-20 && baba1.y<actor.y+80){if (baba1.x>=actor.x-17 && baba1.x<=actor.x+77){baba1.remove();health.x += 11;}}if (baba2.y>actor.y-20 && baba2.y<actor.y+80){if (baba2.x>=actor.x-17 && baba2.x<=actor.x+77){baba2.remove();health.x += 13;}}if (baba3.y>actor.y-20 && baba3.y<actor.y+80){if (baba3.x>=actor.x-17 && baba3.x<=actor.x+77){baba3.remove();health.x += 15;}}if (baba4.y>actor.y-20 && baba4.y<actor.y+80){if (baba4.x>=actor.x-17 && baba4.x<=actor.x+77){baba4.remove();health.x += 20;}}//当生命值没时,循环结束,即游戏结束if (health.x < -1360){flag = false;}try {Thread.sleep(20);//循环每隔20ms循环一次} catch (InterruptedException e) {e.printStackTrace();}repaint();//重新调用画笔方法,重新画}}
}

3.人物类

package secondGame;import com.softeem.game.util.ImageUtil;import java.awt.image.BufferedImage;public class Actor {BufferedImage img;int x,y,w,h;int dir;//控制方向:0为左   1为右public Actor(){img = ImageUtil.getPath("/images/pig.png");x = 600;y = 520;w = img.getWidth();h = img.getHeight();}
}

4.粑粑类(我定义了四个粑粑类,这里只展示其中一个,因为方法都一样)

package secondGame;import com.softeem.game.util.ImageUtil;import java.awt.image.BufferedImage;
import java.util.Random;public class Baba {BufferedImage img;Random random = new Random();int x,y,w,h;int score = 0;int sum = 0;public Baba(){img = ImageUtil.getPath("/images/粑粑.png");x = 90;y = -10;w = img.getWidth();h = img.getHeight();}//appear方法实现粑粑随机生成public void appear(){x = random.nextInt(1270);}public void remove(){y = -10;score++;sum += score;x = random.nextInt(1270);}
}

5.血条类

package secondGame;import com.softeem.game.util.ImageUtil;import java.awt.image.BufferedImage;public class Health {BufferedImage img;int x,y,w,h;public Health(){img = ImageUtil.getPath("/images/血量.png");x = 0;y = 0;w = img.getWidth();h = img.getHeight();}
}

6.游戏结束类

package secondGame;import com.softeem.game.util.ImageUtil;import java.awt.image.BufferedImage;public class gameOver {BufferedImage img1,img2,img3,img4;int x1,y1,w1,h1;int x2,y2,w2,h2;int x3,y3,w3,h3;int x4,y4,w4,h4;public gameOver(){img1 = ImageUtil.getPath("/images/gameover1.png");img2 = ImageUtil.getPath("/images/gameover2.png");img3 = ImageUtil.getPath("/images/gameover3.png");img4 = ImageUtil.getPath("/images/gameover4.png");x1 = 400;y1 = 130;x2 = 400;y2 = 130;x3 = 400;y3 = 130;x4 = 400;y4 = 130;w1 = img1.getWidth();h1 = img1.getHeight();w2 = img2.getWidth();h2 = img2.getHeight();w3 = img3.getWidth();h3 = img3.getHeight();w4 = img4.getWidth();h4 = img4.getHeight();}
}

所用图片以及jar

jar:softeem_game.jar

图片自己画的,有点丑,意会意会即可

背景:

人物(可以用朋友的照片,嘿嘿)

粑粑

结束画面(我做了四个)

游戏界面:

JAVA整蛊朋友小游戏之屎王争霸赛相关推荐

  1. 不愧是大厂牛人!用Java实现象棋小游戏(附超详细,超长究极无敌代码)

    本文实例为大家分享了java实现象棋小游戏的具体代码,供大家参考,具体内容如下 用Eclipse编写 java环境1.8jdk 代码如下 package xiangqi象棋; /***中国象棋Java ...

  2. 手把手教你做一个Java贪吃蛇小游戏

    大家好,我是孙不坚1208,这篇博客给大家分享一下:如何做一个贪吃蛇小游戏(Java版)的exe应用程序,希望能给需要帮助的朋友带来方便. 手把手教你做一个Java贪吃蛇小游戏的exe应用程序 一.J ...

  3. Java写五子棋小游戏

    Java写五子棋小游戏 最近用Java写了个五子棋小游戏,遇到了许多细节问题,在此不得不总结一下,以便有同样需求朋友参考. 1.]面板发生变化,重绘棋盘与棋局问题: 必须调用父类的paint方法,因为 ...

  4. java登塔小游戏,是男人就上一百层

    学习java很久了,很少完完全全的自己编写一个有难度点的程序.又正好赶上一门课程任务,所以前段时间自己决定用java写一个小游戏,既可以当设计作品又可以练习巩固所学. 这个游戏具体规则如下: 1. 在 ...

  5. Java练手小游戏---黄金矿工

    你玩过4399曾经最火的黄金矿工小游戏吗,黄金矿工小游戏是一款休闲娱乐的一个挖宝游戏,在游戏中地下会有许多的宝藏,你得想办法把它们都挖出来,作为矿工的你,对你来说是轻车熟路的,能不能挖到宝,看你抓取的 ...

  6. JAVA实现2048小游戏

    2048小游戏也算是一款好玩的益智休闲小游戏,下面本博主用 java 语言将该游戏复现,感兴趣的小伙伴点击 关注 哦! 同时博主还用 python 语言复现了该游戏,可点击以下链接浏览博主的另一篇文章 ...

  7. java文字类小游戏2.0版本

    java文字类小游戏 用javaFx面板显示文字类小游戏,目前正已完成基本打斗和打怪爆出武器的开发,后续会不断更新示例图如下: 运行这个类开始代码我已上传至码云,有需要的小伙伴自行拉取代码,git项目 ...

  8. Java 贪吃虫小游戏

    我参考了[Java]Java实现贪吃蛇小游戏(带详细注释)和 java贪吃蛇小游戏(详解) 先设置需要用到的常数 package Snake;public class ConstantNumber { ...

  9. Java Swing 经典小游戏《飞机大战》———— (四)碰撞检测 游戏状态与得分 玩家升级

    前期回顾 Java Swing 经典小游戏<飞机大战>---- (一)获取素材,创建窗口,添加滚动背景,双缓冲 Java Swing 经典小游戏<飞机大战>---- (二)玩家 ...

最新文章

  1. Ubuntu 20.04上安装Git方法
  2. R语言pmax函数和pmin函数按位计算向量最大值、最小值实战
  3. 智能车竞赛技术报告 | 双车接力组 - 沈阳航空航天大学 - 精神小车成双 - 三轮车
  4. 不用代理实现弹出进度条窗体
  5. qsort(),sort()排序函数
  6. SAP CRM Long text unit test preparation
  7. Windows 10环境下「MSCOCO Captions」评估代码踩坑记录
  8. Python:int,float,str之间的转换
  9. 计算机一级考试第一套题电子表格,计算机等级考试一级上机试题(第一套)
  10. java.sql.SQLException: null,message server: Host ora-rac2 is blocked because of many
  11. 推荐一个原型设计工具Balsamiq Mockups
  12. springMVC简易学习笔记三(文件上传与异常处理)
  13. 金蝶K3CLOUD7.2内部培训PPT下载
  14. 用计算机制作演示文稿教案博客,《创作演示文稿》教学设计
  15. 阿里云产品推荐——云数据库RDS MySQL 版
  16. 用matlab做音乐仿真,Matlab课程设计报告--MATLAB GUI的音乐键盘仿真
  17. C++boost库中sp_counted_impl_x实现解析
  18. FineReport自动数据点提示轮播接口
  19. 德尔塔病毒劲敌!杨晓明团队发现单抗有效,临床申报正在推进,研究已登Nature子刊...
  20. 32位64位Office 2010 beta 简体中文版下载

热门文章

  1. NTP 时间同步服务器
  2. extremedb同步mysql_数据库选型之内存数据库eXtremeDB
  3. 管人用人育人留人之道-乔布斯法则
  4. 【原创】Win7局域网打印机共享设置(详细图文流程)
  5. mysql的源码解读(1):mysql的目录结构详解
  6. 图神经网络之图游走类模型算法——DeepWalk
  7. socks4代理网络渗透测试实验
  8. vue 监听返回按钮
  9. Redis实战高并发,由浅入深
  10. AssetManager