是挺久以前做的一个东西,突然想到放上来分享一下俺的拙作,纯原创。
利用二维数组对齐进行划分,并讲状态分为被侵略与未被侵略两种状态来记录。 在旧版的easyX可以运行。
源码及exe下载
头文件:
1 #include
2 #include
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()
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 else
51 continue;
52 }
53 }
1 int main()
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 }