是挺久以前做的一个东西,突然想到放上来分享一下俺的拙作,纯原创。
利用二维数组对齐进行划分,并讲状态分为被侵略与未被侵略两种状态来记录。 在旧版的easyX可以运行。
头文件:
1 #include <graphics.h>
2 #include <iostream>
3 const int color_num= 6; 4 static int steps= 14; 5 static int List[ 10][ 10]; // 绘图数组 6 static int vid[ 10][ 10]; // 存储状态数组 7 static char in[ 3]; 8 static int a= 0; 9 class color_flood 10 { 11 void Image1( int i, int j); // 被侵略方块图像绘制 12 void Image2( int i, int j); // 未被侵略图像绘制 13 public: 14 color_flood(); // 数据初始化 15 void Grph(); // 图像初始化 16 void Update(); // 对玩家的操作的相应更新 17 int Iswin(); 18 void chooseimage(); // 玩家做出操作的相应 18 void Output();//调用绘图函数
20};
.cpp文件:
0 #include "FLOOD_IT_v1.0.h"
1 color_flood::color_flood()
2 { 3 memset(vid, 0, sizeof(vid)); 4 memset(List, 0, sizeof(List)); 5 randomize(); 6 for( int i= 1;i< 9;++i) 7 for( int j= 1;j< 9;++j) 8 List[i][j]=random( 6)+ 1; // 随机颜色 9 10 vid[ 1][ 1]= 1; 11 a=List[ 1][ 1]; 12 steps= 14; 13 }
1 void color_flood:: Grph() 2 { 3 memset(vid, 0, sizeof(vid)); 4 memset(List, 0, sizeof(List)); 5 randomize(); 6 for( int i= 1;i< 9;++i) 7 for( int j= 1;j< 9;++j) 8 List[i][j]=random( 6)+ 1; // 随机颜色 9 10 vid[ 1][ 1]= 1; 11 a=List[ 1][ 1]; 12 steps= 14; 13 initgraph( 800, 600); 14 setbkcolor(WHITE); 15 setcolor(BLACK); 16 setlinestyle(PS_DASH, 1, 6); 17 rectangle( 143, 148, 428, 432); 18 rectangle( 30, 100, 770, 570); 19 line( 560, 100, 560, 569); 20 setfillstyle(DARKGRAY); 21 bar( 600, 120, 730, 200); 22 rectangle( 600, 120, 730, 200); 23 setlinestyle(PS_DASH, 1, 1); 24 line( 560, 230, 770, 230); 25 line( 560, 360, 770, 360); 26 line( 560, 450, 770, 450); 27 setfont( 25, 0, " Arial Black "); 28 outtextxy( 620, 250, " STEPS: "); 29 // outtextxy(620,380,"SCORE:"); 30 setfontbkcolor(DARKGRAY); 31 outtextxy( 610, 140, " NEW GAME "); 32 setfont( 55, 0, " Arial Black "); 33 outtextxy( 100, 40, " FLOOD IT! ");
34 }
1 void color_flood:: Update() 2 { 3 for( int i= 1;i< 9;++i) 4 { for( int j= 1;j< 9;++j) 5 { 6 if(vid[i][j]== 1) 7 continue; 8 else 9 { 10 if((vid[i][j- 1]== 1||vid[i- 1][j]== 1||vid[i][j+ 1]== 1||vid[i+ 1][j]== 1)&&List[i][j]==a) 11 vid[i][j]= 1; 12 } 13 } 14 } 15 }
1 void color_flood:: Image1( int i, int j) 2 { 3 switch(a) 4 { 5 case 1:{setfillstyle(RED); break;} 6 case 2:{setfillstyle(BLUE); break;} 7 case 3:{setfillstyle(GREEN); break;} 8 case 4:{setfillstyle(YELLOW); break;} 9 case 5:{setfillstyle(MAGENTA); break;} 10 case 6:{setfillstyle(BROWN); break;} 11 } 12 bar(i* 35+ 145,j* 35+ 150,(i+ 1)* 35+ 145,(j+ 1)* 35+ 150);
13 }
1 void color_flood:: Image2( int i, int j) 2 { 3 switch(List[i+ 1][j+ 1]) 4 { 5 case 1:{setfillstyle(RED); break;} 6 case 2:{setfillstyle(BLUE); break;} 7 case 3:{setfillstyle(GREEN); break;} 8 case 4:{setfillstyle(YELLOW); break;} 9 case 5:{setfillstyle(MAGENTA); break;} 10 case 6:{setfillstyle(BROWN); break;} 11 } 12 bar(i* 35+ 145,j* 35+ 150,(i+ 1)* 35+ 145,(j+ 1)* 35+ 150); 13 }
1 void color_flood:: Output() 2 { 3 for( int i= 1;i< 9;++i) 4 { 5 for( int j= 1;j< 9;++j) 6 { 7 if(vid[i][j]== 0) 8 Image2(i- 1,j- 1); 9 else 10 Image1(i- 1,j- 1); 11 } 12 } 13 14 // *str=steps;
15 }
1 int color_flood:: Iswin() 2 { 3 int n= 0; 4 for( int i= 1;i< 9;++i) 5 for( int j= 1;j< 9;++j) 6 if(vid[i][j]== 1) 7 { 8 n++; 9 } 10 return n; 11 }
1 void color_flood:: chooseimage()
2 {
3 for(int i=0;i<6;i++) 4 { 5 switch(i) 6 { 7 case 0:{setfillstyle(RED);break;} 8 case 1:{setfillstyle(BLUE);break;} 9 case 2:{setfillstyle(GREEN);break;}10 case 3:{setfillstyle(YELLOW);break;}11 case 4:{setfillstyle(MAGENTA);break;}12 case 5:{setfillstyle(BROWN);break;}13 }14 bar(90+i*40+i*30,490,130+i*40+i*30,530);15 }16 MOUSEMSG msg;17 msg=GetMouseMsg();18 while(1)19 { 20 if(MouseHit!=0)21 { 22 if(msg.uMsg==WM_LBUTTONUP)23 { 24 25 if(msg.y>490&&msg.y<530)26 { 27 if(msg.x>90&&msg.x<130)28 {a=1;--steps;}29 if(msg.x>160&&msg.x<200)30 {a=2;--steps;}31 if(msg.x>230&&msg.x<270)32 {a=3;--steps;}33 if(msg.x>300&&msg.x<340)34 {a=4;--steps;}35 if(msg.x>370&&msg.x<410)36 {a=5;--steps;}37 if(msg.x>440&&msg.x<480)38 {a=6;--steps;}39 }40 if(msg.x>600&&msg.x<730&&msg.y>120&&msg.y<200)41 { 42 Grph();43 }44 msg.mkLButton=0; 45 46 }47 48 break;49 }50 else51 continue;52 }53 }1 int main()
2 { 3 color_flood img; 4 img.Grph(); 5 int b; 6 while( 1) 7 { 8 img.Fre(); 9 img.Output(); 10 img.chooseimage(); 11 img.Update(); 12 if(steps==- 1) 13 { 14 setbkcolor(WHITE); 15 setfont( 30, 0, " Arial Black "); 16 outtextxy( 100, 300, " You Lose! Press any key to New Game "); 17 getch(); 18 img.Grph(); 19 } 20 b=img.Iswin(); 21 if(b== 64) 22 { 23 img.Output(); 24 setbkcolor(WHITE); 25 setfont( 30, 0, " Arial Black "); 26 outtextxy( 100, 300, " You Win! Press any key to New Game "); 27 getch(); 28 img.Grph(); 29 } 30 } 31 getch(); 32 closegraph(); 33 return 0; 34 }