import jp.ac.tuis.basic.*; public class Invader{ public static void main(String[] args){ //変数初期化 int WIDTH=40; int HEIGHT=20; BasicGraphics g = new BasicGraphics(WIDTH,HEIGHT,20); int x=WIDTH/2; int y=HEIGHT-2; int alien_x=0; int alien_y=1; int alien_dir=1; boolean game_over=false; char key=0; boolean fired_missile=false; int missile_x=0; int missile_y=0; long SLEEP=100; int POINT=10; int score = 0; int level = 1; int MAXLEVEL = 20; int sublevel = 0; int MAXSUBLEVEL = 2; //画面の初期化 g.console(false); g.color(g.WHITE, g.BLACK); g.cls(); g.locate(0,0); g.color(g.WHITE, g.BLACK); g.print("SCORE : 0"); g.color(g.WHITE, g.GREEN); g.locate(0,y+1); g.print(" "); g.locate(x,y); g.color(g.CYAN, g.BLACK); g.print("▲"); g.beep(); //リターンキーが押されるまで待つ g.locate((WIDTH-12)/2,HEIGHT/2); g.color(g.WHITE, g.BLACK); g.print("ENTERキーでスタート"); while(true){ key = g.inkey(); if(key=='\n') break; g.sleep(100); } g.locate((WIDTH-12)/2,HEIGHT/2); g.color(g.WHITE, g.BLACK); g.print(" "); //メインループ while(!game_over){ //インベーダ移動 for(int i=0; i < level; i++){ g.locate(alien_x,alien_y); g.color(g.WHITE, g.BLACK); g.print(" "); //インベーダを消す alien_x = alien_x + alien_dir; if(alien_x > WIDTH-1 || alien_x < 0){ alien_dir = -alien_dir; alien_x = alien_x + alien_dir; alien_y++; if(alien_y >= y){ game_over = true; } } if(alien_x == missile_x && alien_y == missile_y){ //インベーダにミサイル命中 g.locate(alien_x,alien_y); g.color(g.RED, g.BLACK); g.print("●"); score = score + POINT; g.locate(8,0); g.color(g.WHITE, g.BLACK); g.print(score); alien_x = 0; alien_y = 1; alien_dir=1; sublevel++; if(sublevel > MAXSUBLEVEL){ sublevel = 0; level++; if(level > MAXLEVEL) level = MAXLEVEL; } }else{ //インベーダ再描画 g.locate(alien_x,alien_y); g.color(g.MAGENTA, g.BLACK); g.print("Ж"); } if(game_over){ break; //leave for loop } g.sleep(SLEEP/level); }//end for(i=0; i 0){ g.locate(x,y); g.color(g.WHITE, g.BLACK); g.print(" ");//プレイヤーを消す x--; g.locate(x,y); g.color(g.CYAN, g.BLACK); g.print("▲"); } if((key == 'd' || key == 'l') && x < WIDTH-1){ g.locate(x,y); g.color(g.WHITE, g.BLACK); g.print(" ");//プレイヤーを消す x++; g.locate(x,y); g.color(g.CYAN, g.BLACK); g.print("▲"); } if(key == ' ' && fired_missile == false){ fired_missile = true; missile_x = x; missile_y = y-1; g.locate(missile_x, missile_y); g.color(g.YELLOW, g.BLACK); g.print("!"); }else if(fired_missile == true){ g.locate(missile_x, missile_y); g.color(g.WHITE, g.BLACK); g.print(" ");//ミサイルを消す missile_y = missile_y-1; if(missile_y < 1){ fired_missile = false; }else if(missile_x == alien_x && missile_y == alien_y){ //ミサイル命中 g.locate(missile_x, missile_y); g.color(g.RED, g.BLACK); g.print("●"); score = score + POINT; g.locate(8,0); g.color(g.WHITE, g.BLACK); g.print(score); alien_x = 0; alien_y = 1; alien_dir=1; sublevel++; if(sublevel > MAXSUBLEVEL){ sublevel = 0; level++; if(level > MAXLEVEL) level = MAXLEVEL; } }else { g.locate(missile_x, missile_y); g.color(g.YELLOW, g.BLACK); g.print("!"); } } }//end while(!game_over) g.locate((WIDTH-9)/2, HEIGHT/2); g.color(g.WHITE, g.BLACK); g.print("GAME OVER"); }//end main }//end class Invader