アットウィキロゴ

1/31

  • 暫定完成版
    • 敵キャラを増やした
    • 当たり判定はまだおかしい


import java.awt.*;
import java.applet.*;
import java.util.*;
import java.awt.event.*;





public class mini_pro extends Applet implements KeyListener, Runnable{
Font font = new Font("serif", Font.BOLD, 24);
Image	background, textbox, attack, attack2;
Image hero[ ]=new Image[4];
Image object[ ]=new Image[4];
Image enemy1[ ]=new Image[3];
Image enemy2[ ] = new Image[3];
Image enemy3[ ] = new Image[3];
Image enemy4[ ] = new Image[3];
Image enemy5[ ] = new Image[3];
Image lifepics[ ] = new Image[3];



//背景を動かす変数
int back;
int objectback;
//キャラクターの位置を示す変数
int position=0;
//文章のための変数
String string="";
boolean shown=false;
boolean wait=false;
boolean attackshown=false;
boolean freeze = false;

int heropose=0;
int heroposition=0;
int life = 3;

boolean enemy1status = true;
int enemy1position = 30;
int enemy1pose=0;

boolean enemy2status = true;
int enemy2position = 40;
int enemy2pose=0;
boolean enemy3status = true;
int enemy3position = 50;
int enemy3pose=0;
boolean enemy4status = true;
int enemy4position = 60;
int enemy4pose=0;
boolean enemy5status = true;
int enemy5position = 65;
int enemy5pose=0;

Thread runner;

   public void init() {
	


		addKeyListener(this);
		try {
			MediaTracker mt = new MediaTracker( this );
			int number=1;
			background = getImage(getCodeBase(),"pictures/background.png");
			mt.addImage( background, number++ );
			for (int i=0; i<hero.length; i++){
				hero[i] = getImage(getCodeBase(),
								   "pictures/chara"+i+".png");
				mt.addImage( hero[ i ], number++ );
			}
			for (int i=0; i<hero.length; i++){
				object[i] = getImage(getCodeBase(),
									 "pictures/object"+i+".png");
				mt.addImage( object[ i ], number++ );
				
			}
			textbox = getImage(getCodeBase(), "pictures/textbox.png");
			mt.addImage( textbox, number++ );
			attack= getImage(getCodeBase(), "pictures/attack.png");
			mt.addImage( attack, number++ );
			attack2= getImage(getCodeBase(), "pictures/attack2.png");
			mt.addImage( attack2, number++ );
			for (int i=0; i<enemy1.length; i++){
				enemy1[i] = getImage(getCodeBase(),
									 "pictures/bat"+(i+1)+".png");
				mt.addImage( enemy1[ i ], number++ );
				
			}
			for (int i=0; i<enemy2.length; i++){
				enemy2[i] = getImage(getCodeBase(),
									 "pictures/bat"+(i+1)+".png");
				mt.addImage( enemy2[ i ], number++ );
				
			}
			for (int i=0; i<enemy3.length; i++){
				enemy3[i] = getImage(getCodeBase(),
									 "pictures/bat"+(i+1)+".png");
				mt.addImage( enemy3[ i ], number++ );
				
			}
			for (int i=0; i<enemy4.length; i++){
				enemy4[i] = getImage(getCodeBase(),
									 "pictures/bat"+(i+1)+".png");
				mt.addImage( enemy4[ i ], number++ );
				
			}
			for (int i=0; i<enemy5.length; i++){
				enemy5[i] = getImage(getCodeBase(),
									 "pictures/bat"+(i+1)+".png");
				mt.addImage( enemy5[ i ], number++ );
				
			}
			for (int i=0; i<lifepics.length; i++){
				lifepics[i] = getImage(getCodeBase(),
									"pictures/life"+(i+1)+".png");
				mt.addImage( lifepics[ i ], number++ );
				
			}
			mt.waitForAll( );
		} catch( Exception ex ) { ex.printStackTrace( ); }
		runner = new Thread(this);
		runner.start();
	

	}

   public void paint (Graphics g) {
	g.setColor(Color.white);
	g.setFont(font);
	setSize(640, 480);
	g.drawImage(background, 0-back,0, this);
	g.drawImage(background, 640-back, 0, this);
	g.drawImage(background, -640-back, 0, this);
	g.drawImage(object[0], 640-objectback, 320, this);
	g.drawImage(object[1], 1920-objectback, 0, this);
	g.drawImage(hero[heropose], 128+heroposition, 320, this);
	if(life==0){
		string = "Game Over...";
		shown=true;
		freeze=true;
	}
	if(life==1){
		g.drawImage(lifepics[0],0,0,this);
	}
	if(life==2){
		g.drawImage(lifepics[1],0,0,this);
	}
	if(life==3){
		g.drawImage(lifepics[2],0,0,this);
	}
	if ( shown == true) {
		g.drawImage(textbox, 0,0, this);
		g.drawString(" "+string,40,40);
	}
	if(enemy1status==true){
		g.drawImage(enemy1[enemy1pose],-128+enemy1position*32, 320, this);
	}
	if(enemy2status==true){
		g.drawImage(enemy2[enemy2pose],-128+enemy2position*32, 320, this);
	}
	if(enemy3status==true){
		g.drawImage(enemy3[enemy3pose],-128+enemy3position*32, 320, this);
	}
	if(enemy4status==true){
		g.drawImage(enemy4[enemy4pose],-128+enemy4position*32, 320, this);
	}
	if(enemy5status==true){
		g.drawImage(enemy5[enemy5pose],-128+enemy5position*32, 320, this);
	}
	if(attackshown == true){
		if(heropose==0 || heropose==1){
	g.drawImage(attack, 128+96+heroposition, 320, this);
		}
		if(heropose==2 || heropose==3){
			g.drawImage(attack2, 128-96+heroposition, 320, this);
		}
	}



   }


public void run(){
	if(enemy1status==true){
	try { while(runner == Thread.currentThread()){
		enemy1position-=1;
		if(enemy1pose == 0){
			enemy1pose =1;
		}else{enemy1pose=0;}
		if(Math.abs(enemy1position - position)>=0 && Math.abs(enemy1position - position)<=4 ){
			life-=1;
		}
		enemy2position-=1;
		if(enemy2pose == 0){
			enemy2pose =1;
		}else{enemy2pose=0;}
		if(Math.abs(enemy2position - position)>=0 && Math.abs(enemy2position - position)<=4 ){
			life-=1;
		}
		enemy3position-=1;
		if(enemy3pose == 0){
			enemy3pose =1;
		}else{enemy3pose=0;}
		if(Math.abs(enemy3position - position)>=0 && Math.abs(enemy3position - position)<=4 ){
			life-=1;
		}
		enemy4position-=1;
		if(enemy4pose == 0){
			enemy4pose =1;
		}else{enemy4pose=0;}
		if(Math.abs(enemy4position - position)>=0 && Math.abs(enemy4position - position)<=4 ){
			life-=1;
		}
		enemy5position-=1;
		if(enemy5pose == 0){
			enemy5pose =1;
		}else{enemy5pose=0;}
		if(Math.abs(enemy5position - position)>=0 && Math.abs(enemy5position - position)<=4 ){
			life-=1;
		}
		repaint();
		Thread.sleep(600);
	}
		
	}catch (Exception exc){exc.printStackTrace();}
	}
}
//入力チェック
public void keyPressed(KeyEvent ke){
	int keycode = ke.getKeyCode();
if (wait == false) {
	if (keycode == KeyEvent.VK_ENTER) {
		if(attackshown ==false){
			attackshown = true;
			if(heropose==0 || heropose==1){
			if(enemy1position-position+4>=0 && enemy1position-position+4<=3 ){
				enemy1status=false;
			}
			}
			if(heropose==2 || heropose==3){
			if(enemy1position- position-3>=-3 && enemy1position - position-3<=0){
				enemy1status=false;
			}
			}
			if(heropose==0 || heropose==1){
				if(enemy2position-position+4>=0 && enemy2position-position+4<=3 ){
					enemy2status=false;
				}
			}
			if(heropose==2 || heropose==3){
				if(enemy2position- position-3>=-3 && enemy2position - position-3<=0){
					enemy2status=false;
				}
			}
			if(heropose==0 || heropose==1){
				if(enemy3position-position+4>=0 && enemy3position-position+4<=3 ){
					enemy3status=false;
				}
			}
			if(heropose==2 || heropose==3){
				if(enemy3position- position-3>=-3 && enemy3position - position-3<=0){
					enemy3status=false;
				}
			}
			if(heropose==0 || heropose==1){
				if(enemy4position-position+4>=0 && enemy4position-position+4<=3 ){
					enemy4status=false;
				}
			}
			if(heropose==2 || heropose==3){
				if(enemy4position- position-3>=-3 && enemy4position - position-3<=0){
					enemy4status=false;
				}
			}
			if(heropose==0 || heropose==1){
				if(enemy5position-position+4>=0 && enemy5position-position+4<=3 ){
					enemy5status=false;
				}
			}
			if(heropose==2 || heropose==3){
				if(enemy5position- position-3>=-3 && enemy5position - position-3<=0){
					enemy5status=false;
				}
			}
		}
		repaint();
	}
	if (keycode == KeyEvent.VK_RIGHT) {
		//背景を動かす
		if(position <=58){
		if(position >=-5 && position <= 49){
		back +=32;
		objectback+=32;
		}else{
		heroposition+=32;
		}
		position +=1;
		enemy1position -=1;
		if(enemy1status == true){
		if(Math.abs(enemy1position - position)>=0 && Math.abs(enemy1position - position)<=4 ){
			life-=1;
		}
		}
			enemy2position -=1;
			if(enemy2status == true){
				if(Math.abs(enemy2position - position)>=0 && Math.abs(enemy2position - position)<=4 ){
					life-=1;
				}
			}
				enemy3position -=1;
				if(enemy3status == true){
					if(Math.abs(enemy3position - position)>=0 && Math.abs(enemy3position - position)<=4 ){
						life-=1;
					}
				}
					enemy4position -=1;
					if(enemy4status == true){
						if(Math.abs(enemy4position - position)>=0 && Math.abs(enemy4position - position)<=4 ){
							life-=1;
						}
					}
						enemy5position -=1;
						if(enemy1status == true){
							if(Math.abs(enemy5position - position)>=0 && Math.abs(enemy5position - position)<=4 ){
								life-=1;
							}
						
		}
		}
		if (back>=640) {
			back=0;
		}
		//キャラクターのポーズを変える
		if (heropose == 0 || heropose==2){
			heropose=1;
		}else{
			heropose=0;
		}
		 repaint();
	}
	if (keycode == KeyEvent.VK_LEFT) {
		//背景を動かす
		if(position >=-7){
		if(position >=-5 && position <=49){
		back -=32;
		objectback-=32;
		}else{
		heroposition-=32;
		}
			position -=1;
			enemy1position+=1;
			if(enemy1status == true){
			if(Math.abs(enemy1position - position)>=0 && Math.abs(enemy1position - position)<=4 ){
				life-=1;
			}
			}
			enemy2position+=1;
			if(enemy2status == true){
				if(Math.abs(enemy2position - position)>=0 && Math.abs(enemy2position - position)<=4 ){
					life-=1;
				}
			}
			enemy3position+=1;
			if(enemy3status == true){
				if(Math.abs(enemy3position - position)>=0 && Math.abs(enemy3position - position)<=4 ){
					life-=1;
				}
			}
			enemy4position+=1;
			if(enemy4status == true){
				if(Math.abs(enemy4position - position)>=0 && Math.abs(enemy4position - position)<=4 ){
					life-=1;
				}
			}
			enemy5position+=1;
			if(enemy5status == true){
				if(Math.abs(enemy5position - position)>=0 && Math.abs(enemy5position - position)<=4 ){
					life-=1;
				}
			}
		}
		if (back<=-640) {
			back=0;
		}
		//キャラクターのポーズを変える
		if (heropose == 0 || heropose==2){
			heropose=3;
		}else{
			heropose=2;
		}
		repaint();
	}

	if (keycode == KeyEvent.VK_DOWN) {
		if (position>= 15 && position<=19 && shown==false) {
		string = "Don't go. There is a dangerous cave.";
			shown=true;
			wait = true;
		}
		if(position >= 58 && position <=62 && shown == false){
			string = "goal!!";
			shown=true;
			freeze = true;
		}

	}




}else 		if(wait == true){
	if (keycode == KeyEvent.VK_ENTER) {
		if (shown==true ) {
			 string="";
			shown=false;
			wait = false;
		}
	}
}else if(freeze == true){
}
	repaint();

}


public void keyTyped(KeyEvent ke){

}
public void keyReleased(KeyEvent ke){
	if(attackshown == true){
		attackshown = false;
	}
	repaint();
}


}


名前:
コメント:
最終更新:2007年02月01日 01:56