package 赛车;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import com.util.Setjframe;
public class TestCar extends JFrame implements KeyListener,Runnable{
int x,yy;
//设置游戏的级别
int grade =1;
int grade1=0;
int i1=0;
int j=100;
int y=100;
//判断是否过关
int count=0;
boolean ispass=true;
boolean startcar=true;
boolean isplode=false;
boolean iswin=false;
long start,stop;
Image img=null;
Image img1=null;
Image img2=null;
Image img3=null;
Image imgg=null;
Image over=null;
Image win=null;
Explode e1=new Explode();
// 图片名数组
String str[]={"z1.png","z2.png","z3.png","z4.png","z5.png","z6.png","z7.png"};
//图片名
Image img4[]=new Image[7];
//获取小车y坐标
//Vector<addCar> v1=new Vector<addCar>();
SetCar sc=new SetCar();
//路边物件的y坐标
int y1=150;int y2=100; int y3=200; int y4=19; int y5=0;int y6=230;
//路线的变量
int yy1=40; int yy2=100; int yy3=160;int yy4=220;int yy5=280;
Graphics g1;
Setjframe s1=new Setjframe("赛车游戏",240,300);
public TestCar() {
Toolkit tk=Toolkit.getDefaultToolkit();
img= tk.createImage("Tree.jpg");
img1=tk.createImage("road1.jpg");
img2=tk.createImage("road.jpg");
img3=tk.createImage("car3.jpg");
img3=img3.getScaledInstance(15, 30, img3.SCALE_DEFAULT);
for(int i=0;i<str.length;i++){
img4[i]=tk.createImage(str[i]);
}
over=tk.createImage("over.jpg");
win=tk.createImage("win.jpg");
over=over.getScaledInstance(240,300,over.SCALE_DEFAULT);
win=win.getScaledInstance(240,300,win.SCALE_DEFAULT);
this.setLayout(null);
this.addKeyListener(this);
s1.setjframe(this);
new Thread(this).start();
}
public static void main(String[] args) {
new TestCar();
}
//************************************绘制图片*************************//
public void paint(Graphics g) {
update(g);
g.drawImage(imgg,0,0,this);
}
public void update(Graphics g) {
imgg=createImage(240,300);
g1=imgg.getGraphics();
if(ispass){
//绘制街道
g1.setColor(this.getBackground());
g1.setColor(new Color(143,159,214));
g1.fillRect(0,0, 240, 300);
g1.setColor(Color.black);
g1.fillRect(30,0, 180, 300);
g1.setColor(new Color(19,27,51));
g1.fillRect(40,0,160,300);
if(!startcar){
//绘制街道路旁物件
g1.drawImage(img,10,y1,this);
g1.drawImage(img,212,y2,this);
g1.drawImage(img,212,y3,this);
g1.drawImage(img1,3,y4,this);
g1.drawImage(img1,210,y5,this);
g1.drawImage(img2,5,y6,this);
//绘制街道路线
g1.setColor(Color.white);
g1.fillRect(80,yy1,2,40);
g1.fillRect(120,yy1,2,40);
g1.fillRect(159,yy1,2,40);
g1.fillRect(80,yy2,2,40);
g1.fillRect(120,yy2,2,40);
g1.fillRect(159,yy2,2,40);
g1.fillRect(80,yy3,2,40);
g1.fillRect(120,yy3,2,40);
g1.fillRect(159,yy3,2,40);
g1.fillRect(80,yy4,2,40);
g1.fillRect(120,yy4,2,40);
g1.fillRect(159,yy4,2,40);
g1.fillRect(80,yy5,2,40);
g1.fillRect(120,yy5,2,40);
g1.fillRect(159,yy5,2,40);
g1.drawImage(img3,j,260,this);
sc.drawCar(g1);
} if(isplode){
this.drawExplode(g1,x,yy);
}
} if(count==5){
g1.drawImage(over,0,0,this);
g1.setColor(Color.red);
g1.setFont(new Font("宋体",Font.BOLD,32));
g1.drawString("GAME OVER!!", 40,150);
ispass=false;
JOptionPane.showConfirmDialog(null,"是否从新玩过?S:N");
startcar=true;
}if(iswin){
g1.drawImage(win,0,0,this);
}
}
//车子消失
public void disp(){
for(int i=0;i<sc.v1.size();i++){
addCar a1=(addCar)sc.v1.elementAt(i);
if((a1.getX()<=j&&j<(a1.getX()+15)&&a1.getY()>230&&a1.getY()<260)||
(a1.getX()>j&&a1.getX()<(j+15)&&a1.getY()>230&&a1.getY()<260)){
sc.removecar(i);
isplode=true;
x=a1.getX();
yy=a1.getY();
count++;
}
}
}
//绘制图片
public void drawExplode(Graphics g,int x,int y){
g.drawImage(img4[i1],x,y,this);
}
//*************************************按键事件********************************//
public void keyPressed(KeyEvent e) {
int key=e.getKeyCode();
if(key==KeyEvent.VK_S){
iswin=false;
if(startcar){
grade1=1;
start= System.currentTimeMillis();
stop=start;
startcar=false;
ispass=true;
}
}
if(!startcar){
if(key==KeyEvent.VK_LEFT){
j-=2;
if(j<40){
j=40;
}
}
if(key==KeyEvent.VK_RIGHT){
j+=2;
if(j>185){
j=185;
}
}if(key==KeyEvent.VK_N)
System.exit(0);
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public void run() {
// TODO 自动生成方法存根
while(true){
stop= System.currentTimeMillis();
if(stop-start>=1500){
sc.addCar();
start=stop;
}if(grade1==300){
grade=2;
}if(grade1==600){
grade=3;
}if(grade1==900){
iswin=true;
startcar=true;
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(!startcar){
grade1++;
y1++;y2++;y3++;y4++;y5++;y6++;
if(y1==290)
y1=0;
if(y2==290)
y2=0;
if(y3==290)
y3=0;
if(y4==290)
y4=0;
if(y5==290)
y5=0;
if(y6==290)
y6=0;
yy1++;yy2++;yy3++;yy4++;yy5++;
if(yy1==290)
yy1=0;
if(yy2==290)
yy2=0;
if(yy3==290)
yy3=0;
if(yy5==290)
yy5=0;
if(yy4==290)
yy4=0;
sc.moveCar(grade);
i1++;
if(i1>6){
isplode=false;
i1=0;
}
}
this.disp();
if(ispass){
repaint();
}
}
}
}