制限時間を60秒にして0秒になるとタイムアップでライフを1減らす
棘*に当たった場合もライフを1減らす。ライフが0になるとゲームオーバー。 (初期ライフは5です)
コインをすべて取ってДにたどり着くと画面消去して次ステージのマップへ。
次のステージのマップです↓
int map[11][10] = {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 3, 0, 0, 1, 0, 3, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 2, 0, 0, 2, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};
#include <windows.h>
#include <stdio.h>
#include <conio.h>
int locate(short x, short y)
{
COORD cd = { x * 2, y };
return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cd);
}
void draw(void);
void judge(void);
void input(void);
void move(void);
int map[11][10] = {
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 3, 0, 0, 1, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 2, 0, 0, 1 },
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};
int x = 1;
int y = 8;
int jump = 0;
int coin = 0;
int end = 0;
long time = 0;
int main(void){
for (int i = 0; i<10; i++){
for (int j = 0; j<11; j++){
if (map[j][i] == 3){
coin++;
}
}
}//コインの枚数チェック
locate(4, 13); printf("coin = %d", coin);
draw();
while (true){
time += 1;
if (_kbhit()){
map[y][x] = 0;
locate(x, y); printf(" ");
input();
judge();
map[y][x] = 9;
locate(x, y); printf("●");
}
if (time % 500 == 0){
map[y][x] = 0;
move();
}
if (end == 1){
return 0;
}
locate(4, 14); printf("time = %d", time / 2500);
}
}
void draw(void){
for (int i = 0; i<10; i++){
for (int j = 0; j<11; j++){
locate(i, j);
switch (map[j][i]){
case 1:
printf("■");
break;
case 2:
printf("*");
break;
case 3:
printf("◎");
break;
case 4:
printf("Д");
break;
default:
printf(" ");
break;
}
}
printf("\n");
}
locate(2, 16); printf("●を動かしてcoin◎を全て取りましょう。");
locate(2, 17); printf("全て取るとゴールДが現れます。");
locate(2, 18); printf("棘*に当たるとライフが一減ります。");
}
void judge(void){
switch (map[y][x]){
case 2:
printf("game over!");
_getch();
end = 1;
break;
case 3:
coin--;
locate(4, 13); printf("coin = %d ", coin);
if (coin == 0){
map[1][7] = 4;
locate(4, 13); printf("ok! ", coin);
draw();
}
break;
case 4:
printf("clear! next stage");
_getch();
end = 1;
break;
case 5:
printf("残機が1減りました");
_getch();
end = 1;
break;
}
}
void input(void){
switch (_getch()){
case 77:
if (map[y][x + 1] != 1){ x++; }
break;
case 75:
if (map[y][x - 1] != 1){ x--; }
break;
case 72:
if (map[y + 1][x] == 1){ jump = 4; }
break;
case 27:
end = 1;
break;
}
}
void move(void){
//重力
if (map[y + 1][x] != 1 && jump == 0){
locate(x, y); printf(" ");
y++;
judge();
locate(x, y); printf("●\n");
}
//ジャンプ
if (jump != 0){
locate(x, y); printf(" ");
if (map[y - 1][x] != 1){
y--;
jump--;
}
else{ jump = 0; }
judge();
locate(x, y); printf("●");
}
}