# 程設分享 -- 小恐龍
## 程式碼介紹(新增功能)
* 開始介面
```c=
int flag = 0;
printf("\n\n\n\tPlease press SPACE to start.\n\t");
if(getch() == 32)
{
flag = 1;
}
while (flag == 1)
{....}
```
* 無敵模式(Invincible mode)
```c=
int main()
{
...
if(meetStar (curFloor, playerpos, floor1) == 1)
{
mode = 2;
if(mode == 2)
{
startime = 10;
printf("\tINVINCIBLE MODE\n");
}
}
if(startime > 0)
{
startime--;
printf("\tTime : %d\n\t", startime);
}
if(startime == 0)
{
mode = 1;
}
if(mode == 1)
{
printf("\tNORMAL MODE\n");
if(isDead(curFloor, playerpos, floor1) == 1)
{
dead = 1;
if(dead == 1)
{
printf("\n\t");
puts("--------------------------------------------------");
printf("\tFINAL SCORE: %d\n\t", score);
puts("--------------------------------------------------");
}
break;
}
}
}
void star(char *floor, int n)
{
int r = rand() % n;
floor[CANVAS - r] = '*';
}
int meetStar(int curFloor, int playerpos, char *floor1)
{
if(curFloor == 1 && floor1[playerpos] == '*')
{
return 1;
}
else
{
return 0;
}
}
```
```
新增star與meetStar副函式
碰'*'就會有10秒的無敵時間(碰到障礙物不會死)
```
## 完整程式碼
```c=
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <conio.h>
#define CANVAS 50
void display(char[], int, int);
void shiftLeft(char *);
void insertBarrier(char *, int);
int isDead(int, int, char *);
void star(char *, int);
int meetStar(int, int, char *);
int main()
{
int flag = 0;
printf("\n\n\n\tPlease press SPACE to start.\n\t");
if(getch() == 32)
{
flag = 1;
}
srand(time(NULL));
char floor1[CANVAS], floor2[CANVAS];
int playerpos = 6;
int sleeptime = 50;
int curFloor = 1;
int runtime = 0;
int score = 0;
int startime = 0;
int mode = 1;
int dead = 0;
int i;
for (i = 0; i < CANVAS; i++)
{
floor1[i] = '_';
floor2[i] = ' ';
}
floor1[CANVAS - 1] = 'X';
while (flag == 1)
{
score++;
if(kbhit() && getch() == 32)
{
if(curFloor == 1)
{
runtime = 4;
curFloor = 2;
}
}
if(runtime > 0)
{
runtime--;
}
if(runtime == 0)
{
curFloor = 1;
}
if(curFloor == 1)
{
printf("\n\n\n\t");
display(floor2, 0, CANVAS);
printf("\n\t");
display(floor1, 0, playerpos);
printf("O");
display(floor1, playerpos+1, CANVAS);
printf("\n");
}
else if(curFloor == 2)
{
printf("\n\n\n\t");
display(floor2, 0, playerpos);
printf("O");
display(floor2, playerpos+1, CANVAS);
printf("\n\t");
display(floor1, 0, CANVAS);
printf("\n");
}
printf("\n\t");
printf("SCORE: %d\n", score);
if(score % 10 == 0)
{
insertBarrier(floor1, 15);
}
if(score % 50 == 0 && score != 0)
{
floor1[CANVAS - 1] = '*';
star(floor1, 20);
}
if(meetStar (curFloor, playerpos, floor1) == 1)
{
mode = 2;
if(mode == 2)
{
startime = 10;
printf("\tINVINCIBLE MODE\n");
}
}
if(startime > 0)
{
startime--;
printf("\tTime : %d\n\t", startime);
}
if(startime == 0)
{
mode = 1;
}
if(mode == 1)
{
printf("\tNORMAL MODE\n");
if(isDead(curFloor, playerpos, floor1) == 1)
{
dead = 1;
if(dead == 1)
{
printf("\n\t");
puts("--------------------------------------------------");
printf("\tFINAL SCORE: %d\n\t", score);
puts("--------------------------------------------------");
}
break;
}
}
Sleep(sleeptime);
system("cls");
shiftLeft(floor1);
}
}
void display(char floor[], int lowerlimit, int upperlimit)
{
int i;
for (i = lowerlimit; i < upperlimit; i++)
{
printf("%c", floor[i]);
}
}
void shiftLeft(char *floor)
{
int i;
for(i = 0; i < CANVAS - 1; i++)
{
floor[i] = floor[i+1];
}
floor[CANVAS - 1] = '_';
}
void insertBarrier(char *floor, int n)
{
int r = rand() % n;
floor[CANVAS - r] = 'X';
}
int isDead(int curFloor, int playerpos, char *floor1)
{
if(curFloor == 1 && floor1[playerpos] == 'X')
{
return 1;
}
else
{
return 0;
}
}
void star(char *floor, int n)
{
int r = rand() % n;
floor[CANVAS - r] = '*';
}
int meetStar(int curFloor, int playerpos, char *floor1)
{
if(curFloor == 1 && floor1[playerpos] == '*')
{
return 1;
}
else
{
return 0;
}
}
```