基于easyX的<颜色侵略>小游戏

是挺久以前做的一个东西,突然想到放上来分享一下俺的拙作,纯原创。

利用二维数组对齐进行划分,并讲状态分为被侵略与未被侵略两种状态来记录。 在旧版的easyX可以运行。

源码及exe下载 

头文件:

  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             else
51                 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     }

 

 

转载于:https://www.cnblogs.com/xecet/archive/2012/04/06/2435417.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值