100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 用java制作小游戏:小恐龙跑酷

用java制作小游戏:小恐龙跑酷

时间:2021-08-02 19:51:38

相关推荐

用java制作小游戏:小恐龙跑酷

用java制作小游戏:小恐龙跑酷

插入链接与图片

运行图片:( 第一次做游戏,画风比较丑哈!最左边的就是主角小恐龙了,中间的是障碍物仙人掌,右边的小狗也是障碍物,右上角的是分数条)

图片:

以下是Java工程中的每一个类的代码:

**

MainFrame.java类:

**

import java.awt.Container;

import javax.swing.JFrame;

public class MainFrame extends JFrame {

GamePanel p;

public MainFrame() {setDefaultCloseOperation(EXIT_ON_CLOSE);//设置退出方式p = new GamePanel();Container c = getContentPane();c.add(p);addKeyListener(p);}public static void main(String[] args) {MainFrame frame = new MainFrame();frame.setBounds(500, 235, 1020, 780);//设置窗体的大小和位置frame.setVisible(true);}public void restart() {Container c=getContentPane();c.removeAll();GamePanel np=new GamePanel();c.add(np);addKeyListener(np);c.validate();}

}

**

GamePanel.java类:

**

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Rectangle;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.swing.JPanel;

public class GamePanel extends JPanel implements KeyListener {

BufferedImage image;

Graphics2D g2;

Dinosaur golden;

boolean finish = false;static final int FRESH = 15;BackgroundImage background;List<Obstacle> list = new ArrayList<Obstacle>();int addObstacleTimer = 0;int score=0;int addScoreTimer=0;public GamePanel() {image = new BufferedImage(1000, 735, BufferedImage.TYPE_INT_BGR);g2 = image.createGraphics();golden = new Dinosaur();background = new BackgroundImage();list.add(new Obstacle());FreshThread t = new FreshThread(this);t.start();}private void painImage() {golden.move();background.roll();g2.drawImage(background.image, 0, 0, this);//Rectangle rt=golden.getfeetBounds();//g2.setColor(Color.black);//g2.fillRect(rt.x, rt.y, rt.width, rt.height);g2.drawImage(golden.image, golden.x, golden.y, this);if (addObstacleTimer >= 2000) {Random r=new Random();int a=r.nextInt(100);//创建一个100以内的随机数if(a>60) {//有百分之六十的概率出现新障碍list.add(new Obstacle());}addObstacleTimer = 0;}for (int i = 0; i < list.size(); i++) {Obstacle o = list.get(i);o.move();//rt=o.getBounds();//g2.fillRect(rt.x, rt.y, rt.width, rt.height);g2.drawImage(o.image, o.x, o.y, this);if(o.getBounds().intersects(golden.getfeetBounds())) {gameOver();}}if(addScoreTimer>=500) {score+=10;addScoreTimer=0;}g2.setColor(Color.black);g2.setFont(new Font("黑体", Font.BOLD, 24));//设置分数字体为黑体加粗,24号大小g2.drawString(String.format("%05d", score), 800, 20);//给分数设置格式addObstacleTimer+=FRESH;addScoreTimer+=FRESH;}public void gameOver() {finish=true;}@Overridepublic void paint(Graphics g) {painImage();g.drawImage(image, 0, 0, this);}public boolean isFinish() {return finish;}@Overridepublic void keyPressed(KeyEvent arg0) {// TODO Auto-generated method stub}@Overridepublic void keyReleased(KeyEvent arg0) {int code = arg0.getKeyCode();if (code == KeyEvent.VK_SPACE) {golden.jump();}}@Overridepublic void keyTyped(KeyEvent arg0) {// TODO Auto-generated method stub}

}

**## Dinosaur.java类:**import java.awt.Rectangle;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;public class Dinosaur {int x, y;BufferedImage image;BufferedImage image1, image2, image3;int stepTime = 0;int fresh = GamePanel.FRESH;boolean jumpState = false;//初始化恐龙的跳跃状态int jumpHeight = 370;//跳跃高度final int LOWEST_Y = 620;//恐龙站在地面的的y坐标int jumpValue=0;public Dinosaur() {try {image1 = ImageIO.read(new File("src/小恐龙1.jpg"));//读取图片image2 = ImageIO.read(new File("src/小恐龙2.jpg"));image1 = ImageIO.read(new File("src/小恐龙1.jpg"));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}x = 5;y = LOWEST_Y;}public void move() {step();if(jumpState) {if(y>=LOWEST_Y) {jumpValue=-10;}if(y<=LOWEST_Y-jumpHeight) {jumpValue=10;}y+=jumpValue;if(y>=LOWEST_Y) {jumpState=false;}}}void step() {int tmp = stepTime / 150 % 3;//恐龙摆臂快慢switch (tmp) {case 0:image = image1;break;case 1:image = image2;break;default:image = image1;break;}stepTime += fresh;}public void jump() {jumpState = true;}public Rectangle getfeetBounds() {return new Rectangle(x+40, y+90, 85, 27);}}**## FreshThread.java类:**import java.awt.Container;import javax.swing.JOptionPane;public class FreshThread extends Thread {GamePanel p;public FreshThread(GamePanel p) {this.p=p;}@Overridepublic void run() {while(!p.isFinish()) {//判断是否重启游戏p.repaint();try {Thread.sleep(p.FRESH);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}Container c=p.getParent();while(!(c instanceof MainFrame)) {c=c.getParent();}MainFrame f=(MainFrame) c;JOptionPane.showMessageDialog(f, "游戏结束");f.restart();}}**## BackgroundImage.java类:**import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;public class BackgroundImage {BufferedImage image;BufferedImage image1, image2;Graphics2D g2;int x1, x2;static final int SPEED = 4;public BackgroundImage() {try {image1 = ImageIO.read(new File("src/background.jpg"));image2 = ImageIO.read(new File("src/background.jpg"));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}image = new BufferedImage(1000, 735, BufferedImage.TYPE_INT_BGR);g2 = image.createGraphics();x1 = 0;x2 = 1000;g2.drawImage(image1, x1, 0, null);g2.drawImage(image2, x2, 0, null);}public void roll() {x1 -= SPEED;x2 -= SPEED;if(x1<=-1000) {x1=1000;}if(x2<=-1000) {x2=1000;}g2.drawImage(image1, x1, 0, null);g2.drawImage(image2, x2, 0, null);}}**## Obstacle.java类**import java.awt.Rectangle;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.util.Random;import javax.imageio.ImageIO;public class Obstacle {int x,y;BufferedImage image;BufferedImage dog,cacti;int speed;public Obstacle() {try {dog=ImageIO.read(new File("src/b43538a4a9ba48ef562ac71bb0350bc3.gif"));cacti=ImageIO.read(new File("src/仙人掌_看图王.jpg"));} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}Random r=new Random();int temp=r.nextInt(2);//创建一个随机数,随机出现一个障碍物if(temp==0) {image=dog;}else {image=cacti;}speed=BackgroundImage.SPEED;//背景滚动的速度x=1000;y=620;}public void move() {x-=speed;}public Rectangle getBounds() {if(image==cacti) {return new Rectangle(x, y,image.getWidth(), image.getHeight());}else {return new Rectangle(x, y,image.getWidth()-17, image.getHeight());}}图片素材:![在这里插入图片描述](https://img-/0412222616882.gif)![在这里插入图片描述](https://img-/0412222650230.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MTYwMTA3,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-/0412222717830.jpg)![在这里插入图片描述](https://img-/0412222728885.jpg)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。