hello!各位彦祖们!我们又见面了!!
今天兄弟我给大家带来了一款经典趣味小游戏的项目案例-是男人就坚持30秒
本项目案例涉及到的技术:
- Java 语法基础
- Java 面向对象
- JavaSwing 编程
- Java 线程
是一个非常适合小白来加强以及巩固学习,提升编程思想,以及逻辑思维的项目案例!
给个关注呗!且看且珍惜!(我感觉我飘了)
废话不多说,我们先上图!!
首先看看启动页面:
各位彦祖的身材一定就是这么完美,有空发个图过来我欣赏一下!!O(∩_∩)O哈哈~
接下来我们来看看游戏页面(声明:无不良引导,只是皮一下)
从下图来看,应该看出了我的不容易和艰辛了吧!!这不奖励我一个关注和赞?马赛克加涂鸦,这回应该能过审了吧!!
┭┮﹏┭┮ 福利没有了~~~
接下来就开始挑战了,怕过不了审,图片设置的比较小,也比较保守,彦祖们获取到源码之后,可以敞开来玩
接下来就需要各位万花丛中过,片叶不沾身了!!兄弟们要坐怀不乱,坚持到 30 秒
如果你能坚持 30 秒不碰任何美女,你就可以过关,进入到下一关,下一关美女会变的更多,移动速度会更快
但是假设你没忍住,碰到了美女,那么游戏就会结束,会受到美女无情的嘲讽
好了!我们进入正题吧,接下来我们来看看代码,这款游戏首先我们需要的是创建游戏窗体,代码如下:
package ui;
import javax.swing.JFrame;
public class GameFrame extends JFrame{
public GameFrame() {
setTitle("是男人就坚持30秒");
setSize(App.FRAME_WIDTH,App.FRAME_HEIGHT);
setLocationRelativeTo(null);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
WelcomeFrame frame = new WelcomeFrame();
WelcomePanel panel = new WelcomePanel(frame);
panel.action();
// GameFrame frame = new GameFrame();
// GamePanel panel = new GamePanel();
// panel.action();
frame.add(panel);
frame.setVisible(true);
}
}
然后就是创建面板代码:
package ui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.naming.ldap.StartTlsRequest;
import javax.swing.JPanel;
public class GamePanel extends JPanel{
List<Circle> cs = new ArrayList<Circle>();
int level = 1;
Rect rect = new Rect();
Random rd = new Random();
Timer levelTimer ;
Timer timer ;
boolean gameover = false;
boolean levelShow = true;
boolean gameStart = false;
int second = 0;
int sleep = App.START_SLEEP_TIME;
int daoTime = App.DAO_TIME;
boolean showDao = false;
int circleNum = App.START_CIRCLE_NUM;
BufferedImage bg;
BufferedImage showImg;
BufferedImage overImg;
public GamePanel() {
showImg = ImageUtil.getImg("/img/vectory.jpg");
overImg = ImageUtil.getImg("/img/loser.jpg");
bg = ImageUtil.getImg("/img/bg.jpg");
setBackground(Color.BLACK);
startTimer();
for(int i=0;i<circleNum;i++){
Circle c = new Circle();
cs.add(c);
}
}
public void startTimer(){
levelTimer = new Timer();
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if(gameStart){
second++;
if(second%30==0&&second!=0){
goNextLevel();
}
}
repaint();
}
}, 0,1000);
levelTimer.schedule(new TimerTask() {
@Override
public void run() {
levelShow = false;
showDao = true;
levelTimer.cancel();
repaint();
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
daoTime --;
if(daoTime==0){
timer.cancel();
showDao = false;
gameStart = true;
repaint();
}
}
}, 0,1000);
}
}, 2000);
}
protected void goNextLevel() {
cs.clear();
rect = new Rect();
levelShow = true;
gameStart = false;
level ++;
timer.cancel();
levelTimer.cancel();
addCicle();
sleep -= 10;
daoTime = App.DAO_TIME;
startTimer();
}
protected void addCicle() {
circleNum += cs.size()+5;
for(int i=0;i<circleNum;i++){
Circle c = new Circle();
cs.add(c);
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
//g.drawImage(bg, 0, 0,App.FRAME_WIDTH,App.FRAME_HEIGHT, null);
if(showDao||gameStart){
for(int i=0;i<cs.size();i++){
Circle c = cs.get(i);
//g.setColor(new Color(rd.nextInt(255),rd.nextInt(255),rd.nextInt(255)));
g.setColor(c.color);
//g.fillOval(c.x, c.y, c.w, c.h);
g.drawImage(c.img, c.x, c.y,c.w,c.h, null);
}
g.drawImage(rect.img, rect.x, rect.y,rect.w, rect.h,null);
g.setColor(Color.green);
g.setFont(new Font("楷体",Font.BOLD,30));
g.drawString("骚年你已经坚持"+second+"秒", 10, 30);
}
if(levelShow){
g.setColor(new Color(rd.nextInt(255),rd.nextInt(255),rd.nextInt(255)));
g.setFont(new Font("楷体",Font.BOLD,50));
g.drawString("第"+(level)+"关", 480, 200);
g.setColor(Color.yellow);
g.drawString("准备好哦", 480, 300);
g.drawString("美女们速度会越来越快", 480, 400);
g.drawImage(showImg, 0, 0,450,768, null);
}
if(gameover){
g.drawImage(overImg, 0, 0, 450, 768,null);
g.setColor(Color.red);
g.setFont(new Font("楷体",Font.BOLD,50));
g.drawString("游戏结束了", 480, 200);
g.drawString("你坚持了"+second+"秒", 480, 300);
g.setFont(new Font("楷体",Font.BOLD,30));
if(second<60){
g.drawString("你还是个弟弟哇~~多锻炼身体", 480, 400);
}else{
g.drawString("小哥哥你真棒", 480, 400);
}
}
if(showDao){
//g.drawImage(showImg, 0, 0,450,768, null);
g.setColor(Color.yellow);
g.setFont(new Font("楷体",Font.BOLD,50));
g.drawString("请准备:"+daoTime+"", 400, 250);
}
}
public void action(){
MouseAdapter adapter = new MouseAdapter(){
@Override
public void mouseMoved(MouseEvent e) {
int mx = e.getX();
int my = e.getY();
if(gameStart&&!gameover){
rect.move(mx,my);
}
repaint();
}
};
addMouseMotionListener(adapter);
addMouseListener(adapter);
new Thread(){
public void run(){
while(true){
if(gameStart&&!gameover){
circleMove();
checkBouns();
}
try {
Thread.sleep(sleep);
repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
/**
*
*/
protected void checkBouns() {
for(int i=0;i<cs.size();i++){
Circle c = cs.get(i);
if(rect.hitBy(c)){
gameover = true;
gameStart = false;
cs.clear();
levelTimer.cancel();
timer.cancel();
}
}
}
protected void circleMove() {
for (int i = 0; i < cs.size(); i++) {
Circle c = cs.get(i);
c.move();
}
}
}
完整源码下载地址:
https://download.csdn.net/download/yueyehuguang/89770991?spm=1001.2014.3001.5503
什么?没有下载积分?那也简单!
先关注我,然后后台私信我!我给你发,这样总行吧!!
O(∩_∩)O哈哈~,就酱!我们下期见