五子棋c语言
2016-12-20 16:35
399 查看
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>//可能不是所有的都会用到
int player=1;//对于游戏者的选择
int state[2][300][300];//用于记录之前子的位置
int x=1,y=1;//用于记录光标位置
#define len 16
void gotoxy(int x, int y) //定义出一个移动光标的函数
{
COORD pos;
pos.X = x - 1;
pos.Y = y - 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void qipan()
{
int i,j;
printf("┌─");
for(i=0;i<len-2;i++)
{
printf("┬─");
}
printf("┐");//打出第一行
for(i=0;i<len-2;i++)
{
printf("\n");
for(j=0;j<len;j++)
printf("│ ");
printf("\n├");
for(j=0;j<len-2;j++)
printf("─┼");
printf("─┤");
}//打出中间的数行
printf("\n");
for(j=0;j<len;j++)
{
printf("│ ");
}
printf("\n└");
for(i=0;i<len-2;i++)
{
printf("─┴");
}
printf("─┘");//打出最后两行
gotoxy(x,y);//光标回到左上角
}
void move()//一个移动光标的函数,并将使用了落子函数
{
switch(getch())//之所以x和y分别移动一次的大小不同是为了每次都移动到方格的交叉点,另外黑框的长和宽的长度应该是不同的,所以这样
{
case 'a':if(x>1) x-=4; break ;
case 's':if(y<2*len-2) y+=2; break;
case 'w':if(y>1) y-=2; break;
case 'd':if(x<4*len-4) x+=4; break;
case ' ':if(state[0][x][y]==0&&state[1][x][y]==0) luo(); break;
}
gotoxy(x,y);
}
void luo()
{
switch(player)
{
case 1: printf("●"); state[player][x][y]=1; break;
case 0: printf("○"); state[player][x][y]=1; break;
}
win();
player++;
player=player%2;//玩家切换
}
void win()
{
int i,j,m,n,shu,k,jishu;
for(i=x-4;i<x+8;i+=4)
for(j=y-2;j<y+4;j+=2)
if(state[player][i][j]==1&&(i!=x|j!=y))//对周围9子进行搜索,如果有子进行下一步
{
m=x;
n=y;
jishu=0;
for(k=0;k<4;k++)
{
if(m>0&&n>0)//利用已知的俩个子写出一个函数然后从变量=x/y-4处开始搜素,用if是防止数组炸掉
{
m+=i-x;
n+=j-y;
}
else
break;
}
for(k=0;k<9;k++)//依照函数向前搜索9格, 有5个连续胜利。
{
if(state[player][m]
==1)
{
jishu++;
if(jishu>=5)
{
gotoxy(1,1);
printf("最后落子者胜利");
}
}
else
jishu=0;
if(m>0&&n>0)
{
m-=i-x;
n-=j-y;
}
else
break;
}
}
}
void main()
{
system("mode con cols=64 lines=33");//调整窗口大小
system("color E1");//调整窗口指颜色
qipan();
while(1)
{
move();
}
}
阅读更多
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>//可能不是所有的都会用到
int player=1;//对于游戏者的选择
int state[2][300][300];//用于记录之前子的位置
int x=1,y=1;//用于记录光标位置
#define len 16
void gotoxy(int x, int y) //定义出一个移动光标的函数
{
COORD pos;
pos.X = x - 1;
pos.Y = y - 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void qipan()
{
int i,j;
printf("┌─");
for(i=0;i<len-2;i++)
{
printf("┬─");
}
printf("┐");//打出第一行
for(i=0;i<len-2;i++)
{
printf("\n");
for(j=0;j<len;j++)
printf("│ ");
printf("\n├");
for(j=0;j<len-2;j++)
printf("─┼");
printf("─┤");
}//打出中间的数行
printf("\n");
for(j=0;j<len;j++)
{
printf("│ ");
}
printf("\n└");
for(i=0;i<len-2;i++)
{
printf("─┴");
}
printf("─┘");//打出最后两行
gotoxy(x,y);//光标回到左上角
}
void move()//一个移动光标的函数,并将使用了落子函数
{
switch(getch())//之所以x和y分别移动一次的大小不同是为了每次都移动到方格的交叉点,另外黑框的长和宽的长度应该是不同的,所以这样
{
case 'a':if(x>1) x-=4; break ;
case 's':if(y<2*len-2) y+=2; break;
case 'w':if(y>1) y-=2; break;
case 'd':if(x<4*len-4) x+=4; break;
case ' ':if(state[0][x][y]==0&&state[1][x][y]==0) luo(); break;
}
gotoxy(x,y);
}
void luo()
{
switch(player)
{
case 1: printf("●"); state[player][x][y]=1; break;
case 0: printf("○"); state[player][x][y]=1; break;
}
win();
player++;
player=player%2;//玩家切换
}
void win()
{
int i,j,m,n,shu,k,jishu;
for(i=x-4;i<x+8;i+=4)
for(j=y-2;j<y+4;j+=2)
if(state[player][i][j]==1&&(i!=x|j!=y))//对周围9子进行搜索,如果有子进行下一步
{
m=x;
n=y;
jishu=0;
for(k=0;k<4;k++)
{
if(m>0&&n>0)//利用已知的俩个子写出一个函数然后从变量=x/y-4处开始搜素,用if是防止数组炸掉
{
m+=i-x;
n+=j-y;
}
else
break;
}
for(k=0;k<9;k++)//依照函数向前搜索9格, 有5个连续胜利。
{
if(state[player][m]
==1)
{
jishu++;
if(jishu>=5)
{
gotoxy(1,1);
printf("最后落子者胜利");
}
}
else
jishu=0;
if(m>0&&n>0)
{
m-=i-x;
n-=j-y;
}
else
break;
}
}
}
void main()
{
system("mode con cols=64 lines=33");//调整窗口大小
system("color E1");//调整窗口指颜色
qipan();
while(1)
{
move();
}
}
阅读更多
相关文章推荐
- 实现语言C语言简单实现五子棋
- C 语言控制台实现五子棋项目
- java语言,c语言,五子棋的实现(键盘输入坐标)。
- Android应用多语言支持实现(方法二)
- C++与JAVA语言区别
- 高级着色语言HLSL入门(6)
- 快速掌握一个语言最常用的50%
- 简单易懂的程序语言入门小册子(8):基于文本替换的解释器,小结
- OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法
- 苹果公司的新的编程语言 Swift 高级语言()两--基本数据类型
- C语言习题5.20--算法:汉诺塔
- 【C#语言学习】之如何在VS2015中使用git管理代码
- 20161212C语言基础04_char类型
- go语言笔记——defer作用DB资源等free或实现调试
- java语言基础(96)——线程池的使用
- 模板引擎与模板语言
- ASP、JSP、PHP 、Perl、.NET 等WEB开发语言比较
- 梓益C语言学习总结
- [黑马程序员]--Java语言注解、泛型
- 汇编语言的字节传送