⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch_4u.~cpp

📁 C++ Builder程序员学习数据结构第7章
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "ch_4u.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tsg *sg;                           //Search Game
int g[3][3]={0};
int t=0,v=0,h=0;
int i=-1,j=-1;
int n=0;
bool ok=false;

//---------------------------------------------------------------------------
__fastcall Tsg::Tsg(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall Tsg::startClick(TObject *Sender)      //游戏开始
{
   t++;								//场次累加

   g00->Glyph->LoadFromFile("\graph\\empty.BMP");//按钮图案设置为空
   g01->Glyph->LoadFromFile("\graph\\empty.BMP");
   g02->Glyph->LoadFromFile("\graph\\empty.BMP");
   g10->Glyph->LoadFromFile("\graph\\empty.BMP");
   g11->Glyph->LoadFromFile("\graph\\empty.BMP");
   g12->Glyph->LoadFromFile("\graph\\empty.BMP");
   g20->Glyph->LoadFromFile("\graph\\empty.BMP");
   g21->Glyph->LoadFromFile("\graph\\empty.BMP");
   g22->Glyph->LoadFromFile("\graph\\empty.BMP");


   g00->Enabled=true;				//九宫按钮功能设为能够使用状态
   g01->Enabled=true;
   g02->Enabled=true;
   g10->Enabled=true;
   g11->Enabled=true;
   g12->Enabled=true;
   g20->Enabled=true;
   g21->Enabled=true;
   g22->Enabled=true;

   tout->Caption="第 "+IntToStr(t)+" 局";			//显示棋局次数
   lv->Visible=true;
   lvout->Caption=IntToStr(v)+" 场";				//挑战者胜场

   start->Enabled=false;
   for(int y=0;y<3;y++)							//九宫棋数组归零
      for(int z=0;z<3;z++)
         g[y][z]=0;

   //g11->Caption="R";						//计算机先下
   g11->Glyph->LoadFromFile("\graph\\computer.BMP");

   g11->Enabled=false;
   g[1][1]=1;						   //计算机棋值为1
}
//---------------------------------------------------------------------------
void any()                        //随机下法
{                 //当函数过多时,可点鼠标鼠右键选用ToggleBookmarks功能
   int y,z;
   do{
      randomize();                //随机数的取法
      y=random(3);				//取0、1、2随机数
      z=random(3);
   }while(g[y][z]!=0);				//若所取值非零则继续取数

   	g[y][z]=1;					//计算机下这一步随机步
               if(y==0&&z==0)
               {
                  sg->g00->Glyph->LoadFromFile("\graph\\computer.BMP");
                  sg->g00->Enabled=false;
                  return;
               }
               if(y==0&&z==1)		//设置九宫按钮属性功能
               {
                  sg->g01->Glyph->LoadFromFile("\graph\\computer.BMP");
                  sg->g01->Enabled=false;
                  return;
               }
               if(y==0&&z==2)
               {
                  sg->g02->Glyph->LoadFromFile("\graph\\computer.BMP");
                  sg->g02->Enabled=false;
                  return;
               }
               if(y==1&&z==0)		   //设置九宫按钮属性功能
               {
                  sg->g10->Glyph->LoadFromFile("\graph\\computer.BMP");
                  sg->g10->Enabled=false;
                  return;
               }
               if(y==1&&z==1)
               {
                  sg->g11->Glyph->LoadFromFile("\graph\\computer.BMP");
                  sg->g11->Enabled=false;
                  return;
               }
               if(y==1&&z==2)			//设置九宫按钮属性功能
               {
                  sg->g12->Glyph->LoadFromFile("\graph\\computer.BMP");
                  sg->g12->Enabled=false;
                  return;
               }
               if(y==2&&z==0)
               {
                  sg->g20->Glyph->LoadFromFile("\graph\\computer.BMP");
                  sg->g20->Enabled=false;
                  return;
               }
               if(y==2&&z==1)
               {
                  sg->g21->Glyph->LoadFromFile("\graph\\computer.BMP");
                  sg->g21->Enabled=false;
                  return;
               }
               if(y==2&&z==2)			//设置九宫按钮属性功能
               {
                  sg->g22->Glyph->LoadFromFile("\graph\\computer.BMP");
                  sg->g22->Enabled=false;
                  return;
               }
}
//---------------------------------------------------------------------------
void fsh(int n)                         //第一手应对方法
{
      switch(n)						//n为用户落棋对应位置
      {
         case 1:			//设定上方为电脑落子处
                sg->g01->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g01->Enabled=false;		//使该按键停止功能
                g[0][1]=1;   					//将值存入数组
                ok=true;						//电脑下好了
                break;

         case 2://设定左方为电脑落子处
                sg->g10->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g10->Enabled=false;
                g[1][0]=1;
                ok=true;
                break;

         case 3://设定右方为电脑落子处
                sg->g12->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g12->Enabled=false;
                g[1][2]=1;
                ok=true;
                break;

         case 4://设定上方为电脑落子处
                sg->g01->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g01->Enabled=false;
                g[0][1]=1;
                ok=true;
                break;

         case 6://设定下方为电脑落子处
                sg->g21->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g21->Enabled=false;
                g[2][1]=1;
                ok=true;
                break;

         case 7://设定下方为电脑落子处
                sg->g21->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g21->Enabled=false;
                g[2][1]=1;
                ok=true;
                break;

         case 8://设定右方为电脑落子处
                sg->g12->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g12->Enabled=false;
                g[1][2]=1;
                ok=true;
                break;

         case 9://设定右方为电脑落子处
                sg->g12->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g12->Enabled=false;
                g[1][2]=1;
                ok=true;
                break;
      }
}
//------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------
void sch(int n)                            //第二手应对方法
{
   switch(n)								//n为用户落棋对应位置

      {
         case 2:if(g[2][0]==0)			//用户落于上方,电脑应左下方
                {
                sg->g20->Glyph->LoadFromFile("\graph\\computer.BMP");   //设置电脑下棋图形

                sg->g20->Enabled=false; 	//使该按键停止功能
                g[2][0]=1;				//电脑决策存入数组
                ok=true;					//电脑下好了
                }
                break;

         case 4:if(g[0][2]==0)			//用户落于左方,电脑应右上方
                {
                sg->g02->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g02->Enabled=false;
                g[0][2]=1;
                ok=true;
                }
                break;

         case 6:if(g[2][0]==0)			//用户落于右方,电脑应左下方
                {
                sg->g20->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g20->Enabled=false;
                g[2][0]=1;
                ok=true;
                }
                break;

         case 8:if(g[0][0]==0)			//用户落于下方,电脑应左上方
                {
                sg->g00->Glyph->LoadFromFile("\graph\\computer.BMP");
                sg->g00->Enabled=false;
                g[0][0]=1;
                ok=true;
                }
                break;
      }
}
//------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------
void atk()                                //攻击决胜
{
  if(sg->to2->Enabled==false)				//如果挑战者还未被击败
  {
   if((g[0][0]+g[0][1]+g[0][2])==2)	//如果上横线有两点为电脑所据且挑战者无子
   {
      for(j=0;j<3;j++)				//寻找缺空处
      {
         if(g[0][j]==0)
         {
            g[0][j]=1;				//电脑取得该位址
            i=0;				//数组索引i值为0(此处i为表单变量专取位址)
            return;				//找到即跳出
         }
      }
   }
   if((g[1][0]+g[1][1]+g[1][2])==2)	//如果中横线有两点为电脑所据且挑战者无子
   {
      for(j=0;j<3;j++)
      {
         if(g[1][j]==0)
         {
            g[1][j]=1;
            i=1;					//数组索引i值为1
            return;
         }
      }
   }
   if((g[2][0]+g[2][1]+g[2][2])==2)	//如果下横线有两点为电脑所据且挑战者无子
   {
      for(j=0;j<3;j++)
      {
         if(g[2][j]==0)
         {
            g[2][j]=1;
            i=2;					//数组索引i值为2
            return;
         }
      }
   }
   if((g[0][0]+g[1][0]+g[2][0])==2)	//如果左直线有两点为电脑所据且挑战者无子
   {
      for(i=0;i<3;i++)
      {
         if(g[i][0]==0)
         {
            g[i][0]=1;
            j=0;					//数组索引j值为0
            return;
         }
      }
   }
   if((g[0][1]+g[1][1]+g[2][1])==2)	//如果中直线有两点为电脑所据且挑战者无子
   {
      for(i=0;i<3;i++)				//变量为i
      {
         if(g[i][1]==0)
         {
            g[i][1]=1;
            j=1;
            return;
         }
      }
   }
   if((g[0][2]+g[1][2]+g[2][2])==2)	//如果右直线有两点为电脑所据且挑战者无子
   {
      for(i=0;i<3;i++)
      {
         if(g[i][2]==0)			//找到空位
         {
            g[i][2]=1;
            j=2;
            return;
         }
      }
   }
   if((g[0][0]+g[1][1]+g[2][2])==2)	//如果左斜线有两点为电脑所据且挑战者无子
   {
      for(j=0;j<3;j++)
      {
         if(g[j][j]==0)
         {
            g[j][j]=1;
            i=j;
            return;
         }
      }
   }
   if((g[0][2]+g[1][1]+g[2][0])==2)	//如果右斜线有两点为电脑所据且挑战者无子
   {
      if(g[0][2]==0)				//空位在右上方
      {
         g[0][2]=1;
         i=0;
         j=2;
      }
      if(g[2][0]==0)				//空位在左下方
      {
         g[2][j]=1;

         i=2;
         j=0;
      }
   }
  }
}
//------------------------------------------------------------------------------------------------------
void pvt()                       	//电脑防御挑战者取胜
{
   if((g[0][0]+g[0][1]+g[0][2])==10)	//如果上横线有两点为挑战者所据且电脑无子
   {
      for(j=0;j<3;j++)
      {
         if(g[0][j]==0)
         {
            g[0][j]=1;
            i=0;
            return;
         }
      }
   }
   if((g[1][0]+g[1][1]+g[1][2])==10)	//如果中横线有两点为挑战者所据且电脑无子
   {
      for(j=0;j<3;j++)
      {
         if(g[1][j]==0)
         {
            g[1][j]=1;
            i=1;
            return;
         }
      }
   }
   if((g[2][0]+g[2][1]+g[2][2])==10)	//如果下横线有两点为挑战者所据且电脑无子
   {
      for(j=0;j<3;j++)
      {
         if(g[2][j]==0)
         {
            g[2][j]=1;
            i=2;
            return;
         }
      }
   }
   if((g[0][0]+g[1][0]+g[2][0])==10)	//如果左直线有两点为挑战者所据且电脑无子
   {
      for(i=0;i<3;i++)
      {
         if(g[i][0]==0)
         {
            g[i][0]=1;
            j=0;
            return;
         }
      }
   }
   if((g[0][1]+g[1][1]+g[2][1])==10)	//如果中直线有两点为挑战者所据且电脑无子
   {
      for(i=0;i<3;i++)
      {
         if(g[i][1]==0)
         {
            g[i][1]=1;
            j=1;
            return;
         }
      }
   }
   if((g[0][2]+g[1][2]+g[2][2])==10)	//如果右直线有两点为挑战者所据且电脑无子
   {
      for(i=0;i<3;i++)
      {
         if(g[i][2]==0)
         {
            g[i][2]=1;
            j=2;
            return;
         }
      }
   }
   if((g[0][0]+g[1][1]+g[2][2])==10)	//如果左斜线有两点为挑战者所据且电脑无子
   {
      for(j=0;j<3;j++)
      {
         if(g[j][j]==0)
         {
            g[j][j]=1;
            i=j;
            return;
         }
      }
   }
   if((g[0][2]+g[1][1]+g[2][0])==10)	//如果右斜线有两点为挑战者所据且电脑无子
   {
      if(g[0][2]==0)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -