原創(chuàng)的C語言控制臺小游戲
最開始左上色塊被感染,通過切換顏色,不斷感染同色色塊。亮點是可以切換圖案,設(shè)置方塊個數(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),版 權(quán) 所 有 ●");
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● 很遺憾,您闖關(guān)失?。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 ;
}
演示圖:




以上即是本文所述的全部內(nèi)容了,希望大家能夠喜歡,能夠?qū)Υ蠹覍W(xué)習(xí)C有所幫助。
相關(guān)文章
詳解Bucket Sort桶排序算法及C++代碼實現(xiàn)示例
桶排序是一種線性排序算法,這里我們來詳解Bucket Sort桶排序算法及C++代碼實現(xiàn)示例,需要的朋友可以參考下2016-07-07
C語言中十六進制轉(zhuǎn)十進制兩種實現(xiàn)方法
這篇文章主要介紹了C語言中十六進制轉(zhuǎn)十進制兩種實現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2017-01-01
C語言數(shù)組按協(xié)議存儲與按協(xié)議解析數(shù)據(jù)的實現(xiàn)
今天小編就為大家分享一篇關(guān)于C語言數(shù)組按協(xié)議存儲與按協(xié)議解析數(shù)據(jù)的實現(xiàn),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
C++中malloc與free、new與delete的詳解與應(yīng)用
今天小編就為大家分享一篇關(guān)于C++中malloc與free、new與delete的詳解與應(yīng)用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
C++實現(xiàn)簡易UDP網(wǎng)絡(luò)聊天室
這篇文章主要為大家詳細介紹了C++實現(xiàn)簡易UDP網(wǎng)絡(luò)聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07

