重点
1, 多线程 - 两辆赛车
2, 按键监听 - KeyListener
3, 碰撞检测 -
Rectangle p1=new Rectangle(W/9,H/2,H/30,H/30);
p1.intersects(left);
package chapter1;
package chapter1;
import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.JApplet;
import javax.swing.JFrame;
public class G1P1 extends JFrame{
int W =900, H = 650;
double p1Speed=.5,p2Speed=.5;
final int UP = 0, RIGHT=1, DOWN =2, LEFT=3;
int p1Direction = UP;
int p2Direction = UP;
//以下是边框模块
Rectangle left=new Rectangle(0,0,W/9,H);
Rectangle right=new Rectangle((W/9)*8,0,W/9,H);
Rectangle top=new Rectangle(0,0,W,H/9);
Rectangle bottom=new Rectangle(0,(H/9)*8,W,H/9);
Rectangle center=new Rectangle((int)((W/9)*2.5),(int)((H/9)*2.5),(int)((W/9)*5),(int)((H/9)*4));
//以下是障碍模块
Rectangle obstacle=new Rectangle(W/2,(int)((H/9)*7),W/10,H/9);
Rectangle obstacle2=new Rectangle(W/3,(int)((H/9)*5),W/10,H/4);
Rectangle obstacle3=new Rectangle(2*(W/3),(int)((H/9)*5),W/10,H/4);
Rectangle obstacle4=new Rectangle(W/3,H/9,W/30,H/9);
Rectangle obstacle5=new Rectangle(W/2,(int)((H/9)*1.5),W/30,H/4);
//一下是线模块
Rectangle finish=new Rectangle(W/9,(H/2)-(H/9),(int)((W/9)*1.5),H/70);
Rectangle line0=new Rectangle(W/9,H/2,(int)((W/9)*1.5)/2,H/140);
Rectangle line1=new Rectangle((W/9)+((int)((W/9)*1.5)/2),(H/2)+(H/10),(int)((W/9)*1.5)/2,H/140);
//移动模块
Rectangle p1=new Rectangle(W/9,H/2,H/30,H/30);
Rectangle p2=new Rectangle(((W/9)+((int)((W/9)*1.5)/2)),(H/2)+(H/10),W/30,W/30);
public G1P1(){
super();
setSize(W,H);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);
Move1 m1=new Move1();
Move2 m2=new Move2();
m1.start();
m2.start();
}
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.DARK_GRAY);
g.fillRect(0,0,W,H);
g.setColor(Color.GREEN);
g.fillRect(left.x,left.y,left.width,left.height);
g.fillRect(right.x,right.y,right.width,right.height);
g.fillRect(top.x,top.y,top.width,top.height);
g.fillRect(bottom.x,bottom.y,bottom.width,bottom.height);
g.fillRect(center.x,center.y,center.width,center.height);
g.fillRect(obstacle.x,obstacle.y,obstacle.width,obstacle.height);
g.fillRect(obstacle2.x,obstacle2.y,obstacle2.width,obstacle2.height);
g.fillRect(obstacle3.x,obstacle3.y,obstacle3.width,obstacle3.height);
g.fillRect(obstacle4.x,obstacle4.y,obstacle4.width,obstacle4.height);
g.fillRect(obstacle5.x,obstacle5.y,obstacle5.width,obstacle5.height);
g.setColor(Color.WHITE);
g.fillRect(line0.x,line0.y,line0.width,line0.height);
g.fillRect(line1.x,line1.y,line1.width,line1.height);
g.setColor(Color.YELLOW);
g.fillRect(finish.x,finish.y,finish.width,finish.height);
g.setColor(Color.BLUE);
//g.fill3DRect(p1.x,p1.y, p1.width,p1.height,true);
URL url = this.getClass().getResource("ship2.png");
Image img1 = Toolkit.getDefaultToolkit().getImage(url);
g.drawImage(img1, p1.x, p1.y, this);
g.setColor(Color.RED);
g.fill3DRect(p2.x,p2.y,p2.width,p2.height,true);
}
private class Move1 extends Thread implements KeyListener{
public void run(){
addKeyListener(this);
while(true){
try{
repaint();
if(p1.intersects(left) || p1.intersects(right) ||
p1.intersects(top) || p1.intersects(obstacle) ||
p1.intersects(obstacle2) || p1.intersects(p2) ||
p1.intersects(obstacle3) || p1.intersects(obstacle4) ||
p1.intersects(obstacle5) ){
p1Speed = -4;
}
if(p1.intersects(center)){
p1Speed = -2.5;
}
if(p1Speed<=5){
p1Speed+=.2;
}
//p1.y-=p1Speed;
if(p1Direction == UP){
p1.y -= (int)p1Speed;
}
if(p1Direction == DOWN){
p1.y += (int)p1Speed;
}
if(p1Direction == LEFT){
p1.x -= (int)p1Speed;
}
if(p1Direction == RIGHT){
p1.x += (int)p1Speed;
}
Thread.sleep(75);
}catch(Exception e){
break;
}
}
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent event) {
if(event.getKeyChar() == 'a'){
p1Direction = LEFT;
}
if(event.getKeyChar() == 's'){
p1Direction = DOWN;
}
if(event.getKeyChar() == 'd'){
p1Direction = RIGHT;
}
if(event.getKeyChar() == 'w'){
p1Direction = UP;
}
}
}
private class Move2 extends Thread implements KeyListener{
public void run(){
addKeyListener(this);
while(true){
try{
repaint();
if(p2.intersects(left) || p2.intersects(right) ||
p2.intersects(top) || p2.intersects(obstacle) ||
p2.intersects(obstacle2) || p2.intersects(p1) ||
p2.intersects(obstacle3) || p2.intersects(obstacle4) ||
p2.intersects(obstacle5) ){
p2Speed = -4;
}
if(p2.intersects(center)){
p2Speed = -2.5;
}
if(p2Speed<=5){
p2Speed+=.2;
}
if(p2Direction == UP){
p2.y -= (int)p2Speed;
}
if(p2Direction == DOWN){
p2.y += (int)p2Speed;
}
if(p2Direction == LEFT){
p2.x -= (int)p2Speed;
}
if(p2Direction == RIGHT){
p2.x += (int)p2Speed;
}
Thread.sleep(75);
}catch(Exception e){
break;
}
}
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent event) {
if(event.getKeyChar() == 'j'){
p2Direction = LEFT;
}
if(event.getKeyChar() == 'k'){
p2Direction = DOWN;
}
if(event.getKeyChar() == 'l'){
p2Direction = RIGHT;
}
if(event.getKeyChar() == 'i'){
p2Direction = UP;
}
}
}
public static void main(String[] args) {
new G1P1();
}
}

- 大小: 453 Bytes
分享到:
相关推荐
《C++赛车游戏源代码解析与编程技巧》 在编程世界中,赛车游戏是一种常见的练习项目,它既能锻炼程序员的逻辑思维能力,又能展现游戏设计的趣味性。本篇文章将详细解析一个基于C++语言、在控制台窗口运行的赛车游戏...
"Unity赛车游戏源码"是指使用Unity3D开发的一款赛车游戏的完整代码库,包含了所有游戏逻辑、场景、模型、动画、物理系统等内容。通过分析和学习这个源码,开发者可以深入理解Unity引擎在制作赛车游戏时的应用。 在...
这款"Unity赛车游戏资源+源码"的压缩包提供了丰富的素材和代码,对于想要学习或者开发赛车游戏的开发者来说,是一份宝贵的资料。 首先,我们来看“多个场景”。在Unity中,场景是游戏的一部分,包含了游戏中所有...
基于pygame做的一个赛车游戏python源码.zip基于pygame做的一个赛车游戏python源码.zip基于pygame做的一个赛车游戏python源码.zip基于pygame做的一个赛车游戏python源码.zip基于pygame做的一个赛车游戏python源码.zip...
城市赛车手unity3dCity Moto Racer,Unity竞速赛车游戏源码 Unity精品小游戏源码 , Unity完整项目源码 是Unitypackage包 , 新建空项目直接导入到项目里面就可以运行了,无需其他操作。 适合二次开发和学习使用,都是...
Java赛车游戏源代码是开发者们学习和理解游戏编程的一个优秀实例。它展示了如何利用Java语言构建一个2D赛车游戏,让玩家控制车辆在赛道上行驶,避免与其他车辆碰撞。在这个项目中,我们可以深入探讨以下几个关键知识...
【C++赛车游戏源代码解析】 C++是一种通用的、面向对象的编程语言,它以其高效性和灵活性在游戏开发领域中被广泛使用。本项目是一个简易的赛车游戏,使用C++进行实现,并结合了EasyX图形库来绘制游戏界面。EasyX是...
Java 2D 赛车游戏 文件 SpeedRacer-master.zip 具有以下条目。 .gitignore/*from w w w . ja v a 2 s. c o m*/ README.md SpeedRacer/README SpeedRacer/src/Botao.java SpeedRacer/src/Carro.java SpeedRacer/src...
在这个"unity3D赛车游戏项目源代码"中,我们有机会深入研究如何利用Unity3D构建一款模拟真实赛车的游戏。下面将详细讨论这个项目中涉及的关键知识点。 1. **赛车和越野警车模型**:项目包含了两种不同类型的车辆...
《H5游戏源码解析:Canvas赛车游戏动画与赛车游戏设计》 在现代网页开发中,HTML5(H5)已经成为了制作互动性、富媒体内容的重要工具,尤其是在游戏领域。"H5游戏源码 Canvas赛车游戏动画,赛车游戏.zip"这个资源...
《Android游戏源码安卓单机3D赛车游戏项目》是一个专为Android平台设计的3D赛车游戏开发资源,它提供了一整套完整的源代码,帮助开发者深入理解Android游戏开发技术,特别是3D图形渲染和物理引擎的应用。在这个项目...
【标题】"精彩赛车游戏VB源代码.rar"指的是一个使用Visual Basic(VB)编程语言编写的赛车游戏的源代码集合,被压缩成RAR格式的文件。RAR是一种流行的压缩格式,用于减少文件大小以便于存储和传输。 【描述】中重复...
在本篇内容中,我们将探讨如何使用Unity搭建一款联网多人的VR赛车游戏。这款游戏中将融合多种技术,包括真实的赛车模拟、智能AI对手、环境互动以及多人在线对战功能。 首先,我们需要为游戏构建基础的VR环境。这...
基于unity2021版本的单机赛车游戏,内容包括完整的游戏文件游戏玩法是从起点控制赛车在规定的时间内到达终点,需要躲避沿途的障碍物,超时或者碰撞障碍物导致赛车损毁都会使得游戏失败主要技术点:使用easyroads3...
【UE4 入门——赛车游戏】是一套针对初学者的教程,旨在引导学习者进入虚幻引擎4(Unreal Engine 4,简称UE4)的游戏开发世界,特别是聚焦于制作赛车游戏。在这个教程中,你将学习到如何利用UE4的强大功能来创建一个...
在这个特定的项目中,我们关注的是一个使用Unity3D构建的多人联机赛车游戏的完整源码。这个源码是用C#语言编写的,C#是Unity引擎的主要编程语言,它提供了丰富的类库和功能,便于游戏逻辑的实现。 首先,让我们深入...
【标题】中的“一个使用threejs的简单赛车游戏”指的是基于JavaScript编程语言,利用three.js库开发的一个互动式3D赛车游戏。Three.js是WebGL库,它为开发者提供了在浏览器中创建3D图形的便利工具,使得JavaScript...
King Of Racing 3D 3D赛车之王 Unity炫酷的赛车游戏项目源码C# 支持Unity版本5.5及以上 描述 3D赛车之王将为您带来真实的赛道体验。游戏中将重现这座华丽而宏伟的城市。您可以在许多国家的城市中比赛(越南、香港、...
《3D玩具赛车游戏》是一款基于三维技术的模拟赛车游戏,专为喜欢速度与激情的玩家设计。游戏以其酷炫的视觉效果、真实的物理引擎和趣味性极强的玩法,吸引了众多游戏爱好者。为了能够运行这款3D玩具赛车游戏,玩家的...
【作品名称】:使用 C++ 和 OpenGL 实现简单的 3D 赛车游戏 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 项目结构...