【Java经典游戏】-01-是男人就坚持30秒

hello!各位彦祖们!我们又见面了!!

今天兄弟我给大家带来了一款经典趣味小游戏的项目案例-是男人就坚持30秒

本项目案例涉及到的技术:

  1. Java 语法基础
  2. Java 面向对象
  3. JavaSwing 编程
  4. 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哈哈~,就酱!我们下期见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听潮阁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值