设为首页】 【加入收藏】 【网站地图】 【商品折扣
娱乐一生 娱乐明星
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
首页  |  java  |  .NET  |  C/C++  |  网页技术  |  php  |  asp  |  delphi  |  VC  |  VB开发  |  游戏开发  |  软件工程  |  Power Builder  |  Linux开发  |  Windows开发技巧
当前位置:首页 >> C++技术资料 >> 井字游戏(C++版)终级版

井字游戏(C++版)终级版 -

原帖及讨论:http:// .bc-cn.net/di .a ?boardid=55&am id=113488

前两个版本都多多少少有些缺陷,经过本人仔细研究,终于克服重重困难,编写出了井字游戏终结版,经过大量实验,应该没什么问题了,大家试试吧!!!!!不知道这个游戏能不能评为精品呀???同时还推出了C语言版
#include <iostream>
#include < tring>
using name ace std;
typedef char che [10] //字符数组
typedef int temparr[10] //整型数组
che  arr //定义字符数组变量
temparr brr //定义整型数组变量
int number,suc,n3,c3,n2,c2,n1,c1 
void inarrdata(che  a) //初始化棋盘编号
{
 a[1]='1';a[2]='2';a[3]='3';
 a[4]='4';a[5]='5';a[6]='6';
 a[7]='7';a[8]='8';a[9]='9';
}
void di lay(che  a) //输出棋盘状态
{
 cout< lt;endl;cout< lt;endl;
 cout< lt;" "< lt;a[1]< lt;" "< lt;'|'< lt;" "< lt;a[2]< lt;" "< lt;'|'< lt;" "< lt;a[3]< lt;endl;
 cout< lt;" -----------"< lt;endl;
 cout< lt;" "< lt;a[4]< lt;" "< lt;'|'< lt;" "< lt;a[5]< lt;" "< lt;'|'< lt;" "< lt;a[6]< lt;endl;
 cout< lt;" -----------"< lt;endl;
 cout< lt;" "< lt;a[7]< lt;" "< lt;'|'< lt;" "< lt;a[8]< lt;" "< lt;'|'< lt;" "< lt;a[9]< lt;endl;
 cout< lt;endl;cout< lt;endl;
}
int arrfull() //判断还有没有下棋的位置
{
 int i 
 int arrf=0;
 for(i=1;i<=9;i++)
 if(i==arr[i]-48) //如果字符arr[i]-48等于i
 arrf=1 //那么arrf=1,也就是可以走棋
 return arrf;
}
void cn(int line) //判断状态
{
 witch(line)
 {
 case 0:c3=c3+1 reak;
 case 1:n2=n2+1 reak;
 case 2:c2=c2+1 reak;
 case 3:n1=n1+1 reak;
 case 4:c1=c1+1 reak;
 case 5:n3=n3+1 reak;
 }
}
int linenum(char a,char b,char c) //判断状态
{
 int ln=6;
 if((a=='X')&am am (b=='X')&am am (c=='X'))
 ln=0;
 if(((a=='O')&am am (b=='O')&am am (c!='O'))||((a=='O')&am am (b!='O')&am am (c=='O'))||((a!='O')&am am (b=='O')&am am (c=='O')))
 ln=1;
 if(((a=='X')&am am (b=='X')&am am (c!='X'))||((a=='X')&am am (b!='X')&am am (c=='X'))||((a!='X')&am am (b=='X')&am am (c=='X')))
 ln=2;
 if(((a=='O')&am am (b!='O')&am am (c!='O'))||((a!='O')&am am (b=='O')&am am (c!='O'))||((a!='O')&am am (b!='O')&am am (c=='O')))
 ln=3;
 if(((a=='X')&am am (b!='X')&am am (c!='x'))||((a!='X')&am am (b=='X')&am am (c!='X'))||((a!='X')&am am (b!='X')&am am (c=='X')))
 ln=4;
if((a=='O')&am am (b=='O')&am am (c=='O'))
 ln=5;
 return l 
}
int maxbrr(int *br) //判断最大权值
{
 int temp,i,m 
 temp=-888;
 for(i=1;i<=9;i++)
 {
 if(tem lt;=br[i])
 {
 temp=br[i];
 mb=i;
 }
 }
 return m 
}
void ma tep() //人走棋处理模块
{
 int j;
 di lay(arr);
 if(arrfull()) //如果棋盘上还有下棋的位置,人走一步棋
 {
 cout< lt;"您要走哪一步?请输入数字(1--9):";
 ci gt gt;j;
 while((j<1)||(j>9)||(j!=arr[j]-48))
 {
 cout< lt;"对不起,您输入的数字不对,请重新输入(1--9):";
 ci gt gt;j;
 }
 arr[j]='O';
 3=0;c3=0 2=0;c2=0 1=0;c1=0;
 umber=linenum(arr[1],arr[2],arr[3]);cn(number);
 umber=linenum(arr[4],arr[5],arr[6]);cn(number);
 umber=linenum(arr[7],arr[8],arr[9]);cn(number);
 umber=linenum(arr[1],arr[4],arr[7]);cn(number);
 umber=linenum(arr[2],arr[5],arr[8]);cn(number);
 umber=linenum(arr[3],arr[6],arr[9]);cn(number);
 umber=linenum(arr[1],arr[5],arr[9]);cn(number);
 umber=linenum(arr[3],arr[5],arr[7]);cn(number);
 if(n3!=0) //您赢了
 {
 di lay(arr);
 cout< lt;endl;
 cout< lt;"恭喜您赢了!!!"< lt;endl;
 uc=0;
 }
 }
}
void computerstep() //计算机走棋处理模块
{
 int i;
 if(arrfull()) //如果棋盘上还有可下棋的位置,则计算机走棋
 {
 for(i=1;i<=9;i++) //对每一步可走的棋进行计算
 {
 if(i==arr[i]-48)
 {
 c3=0 2=0;c2=0 1=0;c1=0;
 arr[i]='X';
 umber=linenum(arr[1],arr[2],arr[3]);cn(number);
 umber=linenum(arr[4],arr[5],arr[6]);cn(number);
 umber=linenum(arr[7],arr[8],arr[9]);cn(number);
 umber=linenum(arr[1],arr[4],arr[7]);cn(number);
 umber=linenum(arr[2],arr[5],arr[8]);cn(number);
 umber=linenum(arr[3],arr[6],arr[9]);cn(number);
 umber=linenum(arr[1],arr[5],arr[9]);cn(number);
 umber=linenum(arr[3],arr[5],arr[7]);cn(number);
 rr[i]=(128*c3-63*n2+31*c2-15*n1+7*c1)  //计算此步权值
 arr[i]=i+48;
 }
 else
 rr[i]=-999;
 }
 arr[maxbrr(brr)]='X' //确定计算机走哪一步,权值最大的一步
 c3=0 2=0;c2=0 1=0;c1=0;
  number=linenum(arr[1],arr[2],arr[3]);cn(number);
  number=linenum(arr[4],arr[5],arr[6]);cn(number);
  number=linenum(arr[7],arr[8],arr[9]);cn(number);
  number=linenum(arr[1],arr[4],arr[7]);cn(number);
  number=linenum(arr[2],arr[5],arr[8]);cn(number);
  number=linenum(arr[3],arr[6],arr[9]);cn(number);
  number=linenum(arr[1],arr[5],arr[9]);cn(number);
  number=linenum(arr[3],arr[5],arr[7]);cn(number);
  if(c3!=0) //计算机已赢
 {
 di lay(arr);
 cout< lt;endl;
 cout< lt;"计算机赢了!!!"< lt;endl;
 uc=0;
 }
 }
 else
 uc=0;
}
int main()
{
 cout< lt;"游戏规则:"< lt;endl< lt;"棋盘格式如图,人和计算机在棋盘上交替走棋"< lt;endl;
 cout< lt;"约定计算机使用符号X,人使用符号O"< lt;endl;
 cout< lt;"谁先使一横行或一竖行或对角线上有三个自己的符号,就胜利了!"< lt;endl;
 tring s="y";
 tring ch;
 while(s=="y"||s=="Y")
 {
 inarrdata(arr) //棋盘坐标编号
 di lay(arr) //显示初始棋盘
 uc=1;
 cout< lt;"请选择您是否先走?(y/n)";
 ci gt gt;ch;
 while(ch!="y"&am am ch!="Y"&am am ch!="n"&am am ch!="N")
 {
 cout< lt;"错误!请输入y或n:";
 ci gt gt;ch;
 }
 if((ch=="y")||(ch=="Y")) //输入Y,表示人先走棋
 {
 while(suc)
 {
 ma tep();
 computerstep();
 }
  }
 else  //计算机先走棋
 {
 while(suc)
 {
 computerstep();
 if(suc)
 ma tep();
 }
 }
  if(n3==0&am am c3==0)
  cout< lt;endl< lt;"和棋!"< lt;endl< lt;endl;
 cout< lt;"再来一盘(y/n)?";
 ci gt gt 
 while(s!="y"&am am !="Y"&am am !="n"&am am !="N")
 {
 cout< lt;"错误!请输入y或n:";
 ci gt gt 
 }
 }
 return 0;
}

 



 

娱乐图摘

更多 >>

靓丽清纯美女meimei

美女私房全裸照
导演劝女演员脱衣服(视频)

大胆火辣人体艺术写真(图)

黑丝妹妹热辣诱惑-丝袜美女妹妹

PLMM 漂亮妹妹图集-妹妹图库

全球美女图库-美女集中营

52MM 我爱漂亮妹妹-制服妹妹诱惑

图王图库-世界美女明星图片资料库
美女写真集锦

激情两性-解密性生活
浴室MM湿身内衣诱惑
邻家小妹洗澡被偷拍(视频)

热点文章

更多

· C++设计模式之Singleton
· Singleton的C++实现 及相关问题
· C++对象布局及多态实现之成员函数的调用
· 如何在RichEdit中实现上标下标
· C++箴言:谨慎考虑资源管理类的拷贝行为
· Visual C++实现Flash动画播放
· 内存陷阱 驯服C++中的野指针
· C/C++数组名与指针区别深入探索
· VC#2005快速入门之使用do语句
· 数据结构学习(C++)之栈和队列

热点文章

更多