c语言五子棋
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
//界宽
#define WIDTH 60
//界高
#define HIGHT 28
//界面落子坐标
struct Position
{
int X;
int Y;
}POS = { 34, 11 };
//界面坐标
int data[60][28] = { 0 };
//1为黑 2为白
int Q = 1;
void gotoxy(int x, int y);
//输出界面
void PaintInterface();
void HideCursor();
//判断胜利
void WIN();
//作用于main
void PlayGame();
int main()
{
PlayGame();
return 0;
}
void gotoxy(int x1, int y1)
{
COORD pos = { x1, y1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
int bbb = 0;
void PaintInterface()
{
int i, j;
for (i = 2; i <= WIDTH; i += 2)
{
for (j = 1; j <= HIGHT; j++)
{
//界面核心算法
i == 2 && j == 1 ? gotoxy(i, j), printf("┏"), gotoxy(i + 2, j), printf("━"), gotoxy(i, j + 1), printf("┃") :
i == 2 && j == HIGHT ? gotoxy(i, 27), printf("┗") :
i == WIDTH && j == 1 ? gotoxy(i - 2, 1), printf("┓"), gotoxy(i - 2, 1), printf("━"), gotoxy(i - 2, j + 1), printf("┃") :
i == WIDTH && j == HIGHT ? gotoxy(i - 2, 27), printf("┛"), gotoxy(i - 1, j), printf("━") :
i == 2 && j != 1 && j != HIGHT ? gotoxy(2, j + 1), printf("┠"), gotoxy(i, j + 2), printf("┃"), j++ :
i == WIDTH && j != 1 && j != HIGHT ? gotoxy(i - 2, j + 1), printf("┨"), j < 27 ? gotoxy(i - 2, j + 2), printf("┃"), j++ : j++ :
j == 1 && i != 2 && i != WIDTH ? gotoxy(i + 2, j), printf("┯"), gotoxy(i, j - 2), printf("━"), i++ :
j == HIGHT && i != 2 && i != WIDTH ? gotoxy(i + 1, j - 1), printf("┷"), gotoxy(i - 1, j - 1), printf("━"), i++ : bbb++;
}
}
for (i = 6; i <= 56; i += 4)
{
for (j = 3; j <= 26; j += 2)
{
gotoxy(i - 2, j);
printf("─");
gotoxy(i + 2, j);
printf("─");
gotoxy(i, j - 1);
printf("│");
gotoxy(i, j + 1);
printf("│");
gotoxy(i, j);
printf("┼");
}
}
for (i = 60; i <= 76; i += 2)
{
gotoxy(i, 1);
printf("━");
gotoxy(i, 9);
printf("━");
gotoxy(i, 15);
printf("━");
gotoxy(i, 27);
printf("━");
}
for (j = 1; j <= 27; j++)
{
gotoxy(78, j);
printf("┃");
}
gotoxy(66, 3); printf("作者:");
gotoxy(63, 5); printf("仙人immortal");
gotoxy(60, 11); printf("提示:");
gotoxy(66, 12), printf("黑棋走");
gotoxy(64, 17), printf("五子棋游戏");
gotoxy(65, 19), printf("游戏玩法");
gotoxy(62, 22); printf("移动:↑↓←→");
gotoxy(64, 25); printf("落子: 空格");
gotoxy(58, 1); printf("┓");
gotoxy(2, 28); printf(" ");
gotoxy(60, 28); printf(" ");
}
void WIN()
{
/*横*/if (data[POS.X - 16][POS.Y] == 1 && data[POS.X - 12][POS.Y] == 1 && data[POS.X - 8][POS.Y] == 1 && data[POS.X - 4][POS.Y] == 1 && data[POS.X][POS.Y] == 1 ||
data[POS.X - 12][POS.Y] == 1 && data[POS.X - 8][POS.Y] == 1 && data[POS.X - 4][POS.Y] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X + 4][POS.Y] == 1 ||
data[POS.X - 8][POS.Y] == 1 && data[POS.X - 4][POS.Y] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X + 4][POS.Y] == 1 && data[POS.X + 8][POS.Y] == 1 ||
data[POS.X - 4][POS.Y] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X + 4][POS.Y] == 1 && data[POS.X + 8][POS.Y] == 1 && data[POS.X + 12][POS.Y] == 1 ||
data[POS.X][POS.Y] == 1 && data[POS.X + 4][POS.Y] == 1 && data[POS.X + 8][POS.Y] == 1 && data[POS.X + 12][POS.Y] == 1 && data[POS.X + 16][POS.Y] == 1 ||
/*竖*/ data[POS.X][POS.Y - 8] == 1 && data[POS.X][POS.Y - 6] == 1 && data[POS.X][POS.Y - 4] == 1 && data[POS.X][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 ||
data[POS.X][POS.Y - 6] == 1 && data[POS.X][POS.Y - 4] == 1 && data[POS.X][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X][POS.Y + 2] == 1 ||
data[POS.X][POS.Y - 4] == 1 && data[POS.X][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X][POS.Y + 2] == 1 && data[POS.X][POS.Y + 4] == 1 ||
data[POS.X][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X][POS.Y + 2] == 1 && data[POS.X][POS.Y + 4] == 1 && data[POS.X][POS.Y + 6] == 1 ||
data[POS.X][POS.Y] == 1 && data[POS.X][POS.Y + 2] == 1 && data[POS.X][POS.Y + 4] == 1 && data[POS.X][POS.Y + 6] == 1 && data[POS.X][POS.Y + 8] == 1 ||
/*捺*/ data[POS.X + 16][POS.Y - 8] == 1 && data[POS.X + 12][POS.Y - 6] == 1 && data[POS.X + 8][POS.Y - 4] == 1 && data[POS.X + 4][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 ||
data[POS.X + 12][POS.Y - 6] == 1 && data[POS.X + 8][POS.Y - 4] == 1 && data[POS.X + 4][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X - 4][POS.Y + 2] == 1 ||
data[POS.X + 8][POS.Y - 4] == 1 && data[POS.X + 4][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X - 4][POS.Y + 2] == 1 && data[POS.X - 8][POS.Y + 4] == 1 ||
data[POS.X + 4][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X - 4][POS.Y + 2] == 1 && data[POS.X - 8][POS.Y + 4] == 1 && data[POS.X - 12][POS.Y + 6] == 1 ||
data[POS.X][POS.Y] == 1 && data[POS.X - 4][POS.Y + 2] == 1 && data[POS.X - 8][POS.Y + 4] == 1 && data[POS.X - 12][POS.Y + 6] == 1 && data[POS.X - 16][POS.Y + 8] == 1 ||
/*撇*/ data[POS.X - 16][POS.Y - 8] == 1 && data[POS.X - 12][POS.Y - 6] == 1 && data[POS.X - 8][POS.Y - 4] == 1 && data[POS.X - 4][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 ||
data[POS.X - 12][POS.Y - 6] == 1 && data[POS.X - 8][POS.Y - 4] == 1 && data[POS.X - 4][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X + 4][POS.Y + 2] == 1 ||
data[POS.X - 8][POS.Y - 4] == 1 && data[POS.X - 4][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X + 4][POS.Y + 2] == 1 && data[POS.X + 8][POS.Y + 4] == 1 ||
data[POS.X - 4][POS.Y - 2] == 1 && data[POS.X][POS.Y] == 1 && data[POS.X + 4][POS.Y + 2] == 1 && data[POS.X + 8][POS.Y + 4] == 1 && data[POS.X + 12][POS.Y + 6] == 1 ||
data[POS.X][POS.Y] == 1 && data[POS.X + 4][POS.Y + 2] == 1 && data[POS.X + 8][POS.Y + 4] == 1 && data[POS.X + 12][POS.Y + 6] == 1 && data[POS.X + 16][POS.Y + 8] == 1)
{
gotoxy(30, 14); printf("黑棋胜!");
gotoxy(30, 16); printf("10秒后退出游戏!");
Sleep(10000);
exit(-1);
}
/*横*/if (data[POS.X - 16][POS.Y] == 2 && data[POS.X - 12][POS.Y] == 2 && data[POS.X - 8][POS.Y] == 2 && data[POS.X - 4][POS.Y] == 2 && data[POS.X][POS.Y] == 2 ||
data[POS.X - 12][POS.Y] == 2 && data[POS.X - 8][POS.Y] == 2 && data[POS.X - 4][POS.Y] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X + 4][POS.Y] == 2 ||
data[POS.X - 8][POS.Y] == 2 && data[POS.X - 4][POS.Y] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X + 4][POS.Y] == 2 && data[POS.X + 8][POS.Y] == 2 ||
data[POS.X - 4][POS.Y] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X + 4][POS.Y] == 2 && data[POS.X + 8][POS.Y] == 2 && data[POS.X + 12][POS.Y] == 2 ||
data[POS.X][POS.Y] == 2 && data[POS.X + 4][POS.Y] == 2 && data[POS.X + 8][POS.Y] == 2 && data[POS.X + 12][POS.Y] == 2 && data[POS.X + 16][POS.Y] == 2 ||
/*竖*/ data[POS.X][POS.Y - 8] == 2 && data[POS.X][POS.Y - 6] == 2 && data[POS.X][POS.Y - 4] == 2 && data[POS.X][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 ||
data[POS.X][POS.Y - 6] == 2 && data[POS.X][POS.Y - 4] == 2 && data[POS.X][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X][POS.Y + 2] == 2 ||
data[POS.X][POS.Y - 4] == 2 && data[POS.X][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X][POS.Y + 2] == 2 && data[POS.X][POS.Y + 4] == 2 ||
data[POS.X][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X][POS.Y + 2] == 2 && data[POS.X][POS.Y + 4] == 2 && data[POS.X][POS.Y + 6] == 2 ||
data[POS.X][POS.Y] == 2 && data[POS.X][POS.Y + 2] == 2 && data[POS.X][POS.Y + 4] == 2 && data[POS.X][POS.Y + 6] == 2 && data[POS.X][POS.Y + 8] == 2 ||
/*捺*/ data[POS.X + 16][POS.Y - 8] == 2 && data[POS.X + 12][POS.Y - 6] == 2 && data[POS.X + 8][POS.Y - 4] == 2 && data[POS.X + 4][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 ||
data[POS.X + 12][POS.Y - 6] == 2 && data[POS.X + 8][POS.Y - 4] == 2 && data[POS.X + 4][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X - 4][POS.Y + 2] == 2 ||
data[POS.X + 8][POS.Y - 4] == 2 && data[POS.X + 4][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X - 4][POS.Y + 2] == 2 && data[POS.X - 8][POS.Y + 4] == 2 ||
data[POS.X + 4][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X - 4][POS.Y + 2] == 2 && data[POS.X - 8][POS.Y + 4] == 2 && data[POS.X - 12][POS.Y + 6] == 2 ||
data[POS.X][POS.Y] == 1 && data[POS.X - 4][POS.Y + 2] == 2 && data[POS.X - 8][POS.Y + 4] == 2 && data[POS.X - 12][POS.Y + 6] == 2 && data[POS.X - 16][POS.Y + 8] == 2 ||
/*撇*/ data[POS.X - 16][POS.Y - 8] == 2 && data[POS.X - 12][POS.Y - 6] == 2 && data[POS.X - 8][POS.Y - 4] == 2 && data[POS.X - 4][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 ||
data[POS.X - 12][POS.Y - 6] == 2 && data[POS.X - 8][POS.Y - 4] == 2 && data[POS.X - 4][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X + 4][POS.Y + 2] == 2 ||
data[POS.X - 8][POS.Y - 4] == 2 && data[POS.X - 4][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X + 4][POS.Y + 2] == 2 && data[POS.X + 8][POS.Y + 4] == 2 ||
data[POS.X - 4][POS.Y - 2] == 2 && data[POS.X][POS.Y] == 2 && data[POS.X + 4][POS.Y + 2] == 2 && data[POS.X + 8][POS.Y + 4] == 2 && data[POS.X + 12][POS.Y + 6] == 2 ||
data[POS.X][POS.Y] == 2 && data[POS.X + 4][POS.Y + 2] == 2 && data[POS.X + 8][POS.Y + 4] == 2 && data[POS.X + 12][POS.Y + 6] == 2 && data[POS.X + 16][POS.Y + 8] == 2)
{
gotoxy(30, 14); printf("白棋胜!");
gotoxy(30, 16); printf("10秒后退出游戏!");
Sleep(10000);
exit(-1);
}
}
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void PlayGame()
{
system("title 五子棋");
system("mode con cols=80 lines=29");
system("color a2");
HideCursor();
PaintInterface();
gotoxy(POS.X - 2, POS.Y - 1); printf("*");
gotoxy(POS.X - 2, POS.Y + 1); printf("*");
gotoxy(POS.X + 2, POS.Y + 1); printf("*");
gotoxy(POS.X + 2, POS.Y - 1); printf("*");
char ch;
while (1)
{
ch = _getch();
switch (ch)
{
case 0x48:
gotoxy(POS.X + 2, POS.Y + 1); printf(" ");
gotoxy(POS.X - 2, POS.Y + 1); printf(" ");
POS.Y -= 2;
break;
case 0x50:
gotoxy(POS.X + 2, POS.Y - 1); printf(" ");
gotoxy(POS.X - 2, POS.Y - 1); printf(" ");
POS.Y += 2;
break;
case 0x4B:
gotoxy(POS.X + 2, POS.Y - 1); printf(" ");
gotoxy(POS.X + 2, POS.Y + 1); printf(" ");
POS.X -= 4;
break;
case 0x4D:
gotoxy(POS.X - 2, POS.Y - 1); printf(" ");
gotoxy(POS.X - 2, POS.Y + 1); printf(" ");
POS.X += 4;
break;
case 0x20:
if (Q == 1 && data[POS.X][POS.Y] == 1 || data[POS.X][POS.Y] == 2)
break;
else if (Q == 2 && data[POS.X][POS.Y] == 2 || data[POS.X][POS.Y] == 1)
break;
gotoxy(POS.X, POS.Y);
Q == 1 ? data[POS.X][POS.Y] = 1, printf("●"), Q = 2 : Q == 2 ? data[POS.X][POS.Y] = 2, printf("○"), Q = 1 : bbb++;
if (Q == 1)
{
gotoxy(66, 12);
printf("黑棋走");
}
else
{
gotoxy(66, 12);
printf("白棋走");
}
break;
}
if (POS.X > 58)
{
gotoxy(60, POS.Y - 1); printf(" ");
gotoxy(60, POS.Y + 1); printf(" ");
POS.X = 2;
}
if (POS.X < 0)
{
gotoxy(0, POS.Y - 1); printf(" ");
gotoxy(0, POS.Y + 1); printf(" ");
POS.X = 58;
}
if (POS.Y < 0)
{
gotoxy(POS.X - 2, 0); printf(" ");
gotoxy(POS.X + 2, 0); printf(" ");
POS.Y = 27;
}
if (POS.Y > 27)
{
gotoxy(POS.X - 2, 28); printf(" ");
gotoxy(POS.X + 2, 28); printf(" ");
POS.Y = 1;
}
gotoxy(POS.X - 2, POS.Y - 1); printf("*");
gotoxy(POS.X - 2, POS.Y + 1); printf("*");
gotoxy(POS.X + 2, POS.Y + 1); printf("*");
gotoxy(POS.X + 2, POS.Y - 1); printf("*");
WIN();
}
}
c语言五子棋的更多相关文章
- C语言 五子棋2
#include<windows.h> #include<stdlib.h> #include<stdio.h> #include<conio.h> # ...
- C语言 五子棋
#include <stdlib.h> #include <stdio.h> #include <conio.h> #include <string.h> ...
- C 语言控制台实现五子棋项目
花了一天时间实现了控制台五子棋项目,把项目贴上来.也算是告一段落了. 为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验.所以在编程初期选择了控制台小游戏<单机五子棋> ...
- 用c语言实现简单的五子棋
用c语言实现简单的五子棋 这个小游戏是从零开始的实现的,框架灵感来自于小游戏<走迷宫>. 游戏代码配置: 二维数组+简单逻辑+getch读取键盘+windows函数(刷屏,改颜色,改窗口大 ...
- C/C++编程笔记:C语言开发经典游戏项目《五子棋》,内含源码
上一节给大家分享了扫雷游戏的源代码,本篇文章当然也不会让大家失望,专门针对C语言入门或者学习了部分知识之后的小伙伴来练手的游戏项目——<五子棋大战>,本期并不是使用的easyX,因为考虑到 ...
- 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)
使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置jdk-15.0.1-免配置路径版提取码:earu免安装版 ...
- C语言实现五子棋简单功能
/******************************************************************** C-4.29-1: 实现五子棋游戏 操作说明:用方向键或者& ...
- 笔记:C语言图形基本函数及实例五子棋游戏
初始化图形界面 int gdriver; int gmode; gdriver = DETECT; initgraph(&gdriver,&gmode,"" ); ...
- C语言实现五子棋
可以称得上史上最简单的五子棋版本了. 可以使用curses库来改进页面和下棋方式. 并且对于输入的坐标没有进行鉴别,如果输入的坐标超过棋盘大小,就会段错误退出. 我改进了一点,但是还是没有完全避免这个 ...
随机推荐
- vuex store刷新存储状态
app.vue 平时不想把信息存到session里,只有无可奈何的时候才准备村 <script> export default { name: 'App', created() { //刷 ...
- 小米5查看设备号信息及验证type-c数据线
首先,下载adb软件. 接着打开系统的开发者模式和调试模式. 打开cmd软件,切换到adb软件文件夹所在路径,输入命令:adb devices,则能看到设备的设备号信息. 如果设备号是00000001 ...
- Gradle构建多模块项目
通常我在使用Maven构建项目的时候是将应用项目划分为多个更小的模块. Gradle 项目也拥有多于一个组件,我们也将其称之为多项目构建(multi-project build). 我们首先创建一个多 ...
- Bugku-CTF之Trim的日记本(不要一次就放弃)
Day19 Trim的日记本 http://123.206.87.240:9002/ hints:不要一次就放弃
- linux下的缓存机制及清理buffer/cache/swap的方法梳理 (转)
一.缓存机制介绍 在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果 ...
- javascript 之 数组
定义:var colors=new Array(); var colors=new Array(3); var colors=new Array('red'); var colors=['red',' ...
- css3常用动效以及总结
(迁移自旧博客2017 08 06) CSS3 文本效果: box-shadow:盒子阴影,可以给卡片添加提高美化效果.可广泛应用于内容展示页面. <div class="card&q ...
- IIC为什么要配置为开漏输出呢?
开漏输出只能输出低电平,类似于三极管的集电极,要输出高电平需要上拉电阻才能输出 当集电极接上拉电阻后,(1)基极为高电平,三极管导通,集电极的电位就会被拉低: (2)基极为低电平,三极管不导通,集电极 ...
- Cent OS 7 安装海峰、极点五笔输入法
作为五笔输入法的玩家,输入不使用五笔比较难受:最近安装了 Cent OS 7 (带 GNOME. KDE桌面)系统,默认安装的是拼音输入法,这那受得了,赶紧上车找五笔输入法. 在此之前我查阅了百度得到 ...
- PostgreSQL 与 PostGIS
PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大.特性最丰富和最复杂的自由软件数据库系统.它起源于伯克利(BSD)的数据库研究计划,目前是最重要的开源数据库产 ...