原創(chuàng)的C語言控制臺小游戲
更新時間:2015年03月23日 10:24:09 作者:OliverChu
本文給大家分享的是個人原創(chuàng)設計的一個C語言控制臺小游戲,非常的簡單,但是挺好玩的,推薦給大家,有需要的小伙伴也可以自由擴展下。
最開始左上色塊被感染,通過切換顏色,不斷感染同色色塊。亮點是可以切換圖案,設置方塊個數(shù)和最大限制次數(shù)。整體還是比較滿意,希望大神指教。
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
int DIFFICULT=44;
int count=0 ;
int TYPE_SHAPE=2 ;
int flag=7 ;
int LINE=12;
struct MyStruct
{
int shape ;
int color ;
int infect ;
};
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
{
HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);
}
void WelcomeScr()
{
int i;
printf("\n\n\n\t\t");
printf("●程序初始化中〉");
for(i=0; i<=100; i++)
{
SetColor(i%6+8,0);
printf("%3d",i);
SetColor(15,0);
printf(" %%");
SetColor(i%6+8,0);
printf(" Written by Oliver!");
Sleep(20);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
}
printf("\a");
Sleep(1000);
system("cls");
printf("\n\n\n\t\t");
SetColor(15,0);
printf("●請輸入方塊行數(shù) 〉 (最好不超過21行)");
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%d",&LINE);
printf("\n\n\n\t\t");
printf("●請輸入最大次數(shù) 〉");
scanf("%d",&DIFFICULT);
system("cls");
}
void Show()
{
int i ;
SetColor(15,0);
printf("\n ※ 操作次數(shù): %-2d / %d (共%3d個色塊)\n",count,DIFFICULT,LINE*LINE);
printf("\n ※ 操作方法: ");
for(i=1; i<7; i++)
{
SetColor(15,0);
printf("%d.",i);
SetColor(i+8,0);
printf("%c ",TYPE_SHAPE);
}
SetColor(15,0);
printf("7.");
SetColor(9,0);
printf("重");
SetColor(10,0);
printf("新");
SetColor(11,0);
printf("生");
SetColor(12,0);
printf("成 ");
SetColor(15,0);
printf("0.");
SetColor(14,0);
printf("改");
SetColor(13,0);
printf("變");
SetColor(12,0);
printf("圖");
SetColor(11,0);
printf("案 ");
SetColor(15,0);
printf("\n\n ※ 請按下 0 ~ 7 鍵位> ");
}
int Choose()
{
int choose ;
fflush(stdin);
scanf("%d",&choose);
switch(choose)
{
case 0 :
TYPE_SHAPE++;
if(TYPE_SHAPE==7)
{
TYPE_SHAPE=1 ;
}
return 0 ;
case 1 :
return 1 ;
case 2 :
return 2 ;
case 3 :
return 3 ;
case 4 :
return 4 ;
case 5 :
return 5 ;
case 6 :
return 6 ;
case 7 :
return 7 ;
default :
printf("\n\t\t\a● 輸入無效,請重新輸入!");
Sleep(1000);
return 0 ;
}
}
void main()
{
int i,j ;
int num=0 ;
char ch ;
int cc ;
int jj;
struct MyStruct array[41][41];
system("title 感染方塊 Oliver's QQ 564404096");
srand((time(NULL)%100)*rand());
WelcomeScr();
loop :
for(i=0; i<LINE; i++)
{
for(j=0; j<LINE; j++)
{
array[i][j].shape=TYPE_SHAPE ;
if(flag==7)
{
array[i][j].color=rand()%6+1 ;
array[i][j].infect=0 ;
count=0 ;
cc=1 ;
}
}
}
printf("\n");
array[0][0].infect=1 ;
for(jj=0; jj<LINE; jj++)
{
for(i=0; i<LINE; i++)
{
for(j=0; j<LINE; j++)
{
if(array[i][j].color==array[i][j+1].color&&array[i][j].infect==1&&array[i][j+1].infect!=1)
{
array[i][j+1].infect=1 ;
}
if(array[i][j].color==array[i+1][j].color&&array[i][j].infect==1&&array[i+1][j].infect!=1)
{
array[i+1][j].infect=1 ;
}
}
}
for(i=LINE-1; i>0; i--)
{
for(j=LINE-1; j>0; j--)
{
if(array[i][j].color==array[i-1][j].color&&array[i][j].infect==1&&array[i-1][j].color!=1)
{
array[i-1][j].infect=1 ;
}
if(array[i][j].color==array[i][j-1].color&&array[i][j].infect==1&&array[i][j-1].color!=1)
{
array[i][j-1].infect=1 ;
}
}
}
cc=1 ;
for(i=0; i<LINE; i++)
for(j=0; j<LINE; j++)
{
if(array[i][j].infect==0)
{
cc=0 ;
break ;
}
}
}
for(i=0; i<LINE; i++)
{
printf(" ");
for(j=0; j<LINE; j++)
{
SetColor(array[i][j].color+8,0);
printf("%c ",array[i][j]);
}
printf("\n");
}
Show();
if(count<=DIFFICULT&&cc==1&&flag!=7&&flag!=0)
{
system("cls");
printf("\n\n\n\n\t\t\t●%5d個色塊你用了%d步完成 ●",LINE*LINE,count);
printf("\n\n\t\t\t● 恭喜你,您獲得了勝利!\n");
loop2 :
printf("\n\t\t\t\a● 是否繼續(xù)?(Y/N)>");
fflush(stdin);
if((ch=getch())=='Y'||ch=='y')
{
system("cls");
flag=7 ;
goto loop ;
}
else if(ch=='n'||ch=='N')
{
system("cls");
printf("\n\t\t\t● 謝 謝 您 的 使 用 !\n\n\t\t\t● 作 者: Oliver\n\n\t\t\t● Q Q: 564404096\n\n\t\t\t● 代 碼 原 創(chuàng),版 權 所 有 ●");
Sleep(5000);
exit(1);
}
else
{
printf("\n\n\t\t\t\a● 輸入錯誤重新輸入 >");
Sleep(1000);
system("cls");
goto loop2 ;
}
}
else if(count>DIFFICULT)
{
system("cls");
printf("\n\n\n\n\t\t\t\a● 很遺憾,您闖關失敗!\n");
goto loop2 ;
}
else
;
flag=Choose();
if(flag!=0)
{
array[0][0].color=flag ;
if(flag!=7)
{
count++;
}
for(i=0; i<LINE; i++)
{
for(j=0; j<LINE; j++)
{
if(array[i][j].infect==1)
{
array[i][j].color=flag ;
}
}
}
}
system("cls");
goto loop ;
}
演示圖:




以上即是本文所述的全部內容了,希望大家能夠喜歡,能夠對大家學習C有所幫助。
相關文章
C語言中find_package()的搜索路徑的實現(xiàn)
本文主要介紹了C語言中find_package()的搜索路徑的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
淺析結束程序函數(shù)exit, _exit,atexit的區(qū)別
在一個程序中最多可以用atexit()注冊32個處理函數(shù),這些處理函數(shù)的調用順序與其注冊的順序相反,也即最先注冊的最后調用,最后注冊的最先調用2013-09-09

