Leo-io 的C语言实现简单五子棋游戏观后感
源代码:
/**************************************************************
** 文 件 名:wuziqi.cpp
** 功 能:扫雷
** 作 者:褚禹江
** 创建日期:2018.05.20
** 修改日期:2018.06.22
**************************************************************/
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <string.h>
/**************************************************************/
void init_system(); //初始化系统
void close_system(); //关闭系统
void init_game(); //初始化游戏界面
void m_white(); //白棋
void m_black(); //黑棋
void m_play(); //下棋
int m_win(); //判断胜负
void m_replay(); //重玩
void draw_bine(); //覆盖棋 悔棋
/**************************************************************/
int m_bine[22][22] ; //定义棋子数组
int m_w = 15,m_h = 15,m_wh = 25; //定义行列数,每格像素数
int m_x0 = 25,m_y0 = 25; //初始棋子位置
int m_x9 = 375,m_y9 = 375; //最终棋子位置
int flag;
#define LIGHTBROWN RGB(255,211,155)//覆盖棋颜色
/**************************************************************/
/**************************************************************/
void main()
{
init_system();
m_play();
close_system();
}
/*************************************************************/
void init_system() //初始化系统
{
init_game();
}
void init_game() //初始化游戏界面
{
IMAGE img;
loadimage(&img, "test.jpg");//导入test图片用作棋盘
int w, h;
w = img.getwidth();
h = img.getheight();
initgraph(w+150,h);
putimage( 0, 0, &img);
setlinecolor(WHITE);
setfillcolor(BLACK);
fillrectangle(w, 0, w+130, 60);
settextstyle(20,0,"楷体");
outtextxy(w+10,5 ,"黑方:玩家一");
outtextxy(w+10,30 ,"白方:玩家二");
}
void close_system() //关闭系统
{
closegraph();
}
/*********************************************/
void m_white() //将画笔变为白色
{
setlinecolor(WHITE);
setfillcolor(WHITE);
}
void m_black() //将画笔变为黑色
{
setlinecolor(BLACK);
setfillcolor(BLACK);
}
void draw_bine(int x,int y)//将背景覆盖实现悔棋
{
setcolor(LIGHTBROWN);
circle(x,y,11);
setfillcolor(LIGHTBROWN);
floodfill(x,y,LIGHTBROWN);
setcolor(BLACK);
line(x-11-1,y-1,x+11-1,y-1);
line(x-1,y-11-1,x-1,y+11-1);
}
/**********************************************/
void m_play() //下棋
{
MOUSEMSG m_mouse;
int i,j;
while(1)
{
flag = 0;
m_mouse = GetMouseMsg();
switch(m_mouse.uMsg)
{
int a,b;
case WM_LBUTTONDOWN: //左键下黑棋
{
if(m_mouse.x > m_x0-m_wh/2 && m_mouse.x < m_x9+m_wh/2&&
m_mouse.y > m_y0-m_wh/2 && m_mouse.y < m_y9+m_wh/2) //判断是否在棋盘内
{
for(i = 0 ; i <= 15 ; i++)
{
for(j = 0 ; j <= 15 ; j++)
{
if(m_mouse.x >= m_x0-m_wh/2 +i*m_wh &&
m_mouse.x <= m_x0+m_wh/2 +i*m_wh &&
m_mouse.y >= m_y0-m_wh/2 +j*m_wh &&
m_mouse.y <= m_y0+m_wh/2 +j*m_wh) //纠正棋子位置,使其落在两线交叉点
{
a = i + 1;
b = j + 1;
m_mouse.x = a*m_wh;
m_mouse.y = b*m_wh;
break;
}
}
}
if(m_bine[a][b] != 0) //如果此处有棋子则不能下棋
continue;
m_bine[a][b] = 1;
m_black();
fillcircle(m_mouse.x,m_mouse.y,10);
}
flag = m_win();
if(flag == 1) //判断是否胜利
{
outtextxy(400,250 ,"按任意键");
outtextxy(400,270 ,"再来一盘");
getch();
m_replay();
}
else
m_win();
}
break;
case WM_RBUTTONDOWN : //右键下白棋
{
if(m_mouse.x > m_x0-m_wh/2 && m_mouse.x < m_x9+m_wh/2&&
m_mouse.y > m_y0-m_wh/2 && m_mouse.y < m_y9+m_wh/2) //判断是否在棋盘内
{
for(i = 0 ; i <= 15 ; i++)
{
for(j = 0 ; j <= 15 ; j++)
{
if(m_mouse.x >= m_x0-m_wh/2 +i*m_wh &&
m_mouse.x <= m_x0+m_wh/2 +i*m_wh &&
m_mouse.y >= m_y0-m_wh/2 +j*m_wh &&
m_mouse.y <= m_y0+m_wh/2 +j*m_wh) //纠正棋子位置,使其落在两线交叉点
{
a = i + 1;
b = j + 1;
m_mouse.x = a*m_wh;
m_mouse.y = b*m_wh;
break;
}
}
}
if(m_bine[a][b] != 0) //如果此处有棋子则不能下棋
continue;
m_bine[a][b] = 2;
m_white();
fillcircle(m_mouse.x,m_mouse.y,10);
}
flag = m_win();
if(m_win() == 1) //判断是否胜利
{
outtextxy(400,250 ,"按任意键");
outtextxy(400,270 ,"再来一盘");
getch();
m_replay();
}
else
m_win();
}
break;
case WM_MBUTTONDOWN:
{
if(m_mouse.x > m_x0-m_wh/2 && m_mouse.x < m_x9+m_wh/2&&
m_mouse.y > m_y0-m_wh/2 && m_mouse.y < m_y9+m_wh/2) //判断是否在棋盘内
{
for(i = 0 ; i <= 15 ; i++)
{
for(j = 0 ; j <= 15 ; j++)
{
if(m_mouse.x >= m_x0-m_wh/2 +i*m_wh &&
m_mouse.x <= m_x0+m_wh/2 +i*m_wh &&
m_mouse.y >= m_y0-m_wh/2 +j*m_wh &&
m_mouse.y <= m_y0+m_wh/2 +j*m_wh) //纠正棋子位置,使其落在两线交叉点
{
a = i + 1;
b = j + 1;
m_mouse.x = a*m_wh;
m_mouse.y = b*m_wh;
break;
}
}
}
if(m_bine[a][b] == 0)
continue;
m_bine[a][b] = 0; //将本存在棋的数组赋0
draw_bine(m_mouse.x,m_mouse.y);
}
}
break;
}
}
}
void m_replay()//重新游戏
{
memset(m_bine,0,sizeof(m_bine));//初始化数组
init_game();
}
int m_win() //判断是否胜利
{
int i,j;
for(i = 1 ; i <= 15 ; i++)
{
for(j = 1 ; j <= 15 ; j++)
{
if(m_bine[i][j] == 1 && m_bine[i+1][j] == 1 && m_bine[i+2][j] == 1 &&
m_bine[i+3][j] == 1 && m_bine[i+4][j] == 1)
{
settextcolor(WHITE);
outtextxy(400,200 ,"the black win");
return 1;
}
else if(m_bine[i][j] == 1 && m_bine[i+1][j+1] == 1 && m_bine[i+2][j+2] == 1 &&
m_bine[i+3][j+3] == 1 && m_bine[i+4][j+4] == 1)
{
settextcolor(WHITE);
outtextxy(400 ,200 ,"the black win");
return 1;
}
else if(m_bine[i][j+1] == 1 && m_bine[i][j+2] == 1 && m_bine[i][j+3] == 1 &&
m_bine[i][j] == 1 && m_bine[i][j+4] == 1)
{
settextcolor(WHITE);
outtextxy(400 ,200,"the black win");
return 1;
}
else if(i >= 3 && m_bine[i][j] == 1 && m_bine[i+1][j-1] == 1 && m_bine[i+2][j-2] == 1 &&
m_bine[i+3][j-3] == 1 && m_bine[i+4][j-4] == 1)
{
settextcolor(WHITE);
outtextxy(400 ,200 ,"the black win");
return 1;
}
else if(j >= 3 && m_bine[i][j] == 1 && m_bine[i+1][j-1] == 1 && m_bine[i+2][j-2] == 1 &&
m_bine[i+3][j-3] == 1 && m_bine[i+4][j-4] == 1)
{
settextcolor(WHITE);
outtextxy(400 ,200 ,"the black win");
return 1;
}
else if(m_bine[i][j] == 2 && m_bine[i+1][j] == 2 && m_bine[i+2][j] == 2 &&
m_bine[i+3][j] == 2 && m_bine[i+4][j] == 2)
{
settextcolor(WHITE);
outtextxy(400,200 ,"the white win");
return 1;
}
else if(m_bine[i][j] == 2 && m_bine[i+1][j+1] == 2 && m_bine[i+2][j+2] == 2 &&
m_bine[i+3][j+3] == 2 && m_bine[i+4][j+4] == 2)
{
settextcolor(WHITE);
outtextxy(400 ,200 ,"the white win");
return 1;
}
else if(m_bine[i][j+1] == 2 && m_bine[i][j+2] == 2 && m_bine[i][j+3] == 2 &&
m_bine[i][j] == 2 && m_bine[i][j+4] == 2)
{
settextcolor(WHITE);
outtextxy(400 ,200,"the white win");
return 1;
}
else if(i >= 3 && j > 3 && m_bine[i][j] == 2 && m_bine[i+1][j-1] == 2 && m_bine[i+2][j-2] == 2 &&
m_bine[i+3][j-3] == 2 && m_bine[i+4][j-4] == 2)
{
settextcolor(WHITE);
outtextxy(400 ,200 ,"the white win");
return 1;
}
else if(j >= 3 && m_bine[i][j] == 2 && m_bine[i+1][j-1] == 2 && m_bine[i+2][j-2] == 2 &&
m_bine[i+3][j-3] == 2 && m_bine[i+4][j-4] == 2)
{
settextcolor(WHITE);
outtextxy(400 ,200 ,"the white win");
return 1;
}
}
}
return 0;
}
/**********************************************/
操作说明:
将图片保存为test.jpg,并放在程序根目录下。
使用左键下黑棋,使用右键下白棋,中键进行棋子的覆盖并实现悔棋。
感想:该程序运用了C语言和esayx库的相关代码,实现了黑白棋的交错落子和悔棋功能,出现五子可以自动进行游戏胜负结算,并且可以快速进入下一句的游戏。
Leo-io 的C语言实现简单五子棋游戏观后感的更多相关文章
- 用Java写的简单五子棋游戏(原创五子连珠算法)
源码jar包(已安装jdk环境可直接运行) 下载地址:http://download.csdn.net/detail/eguid_1/9532912 五子连珠算法为自创算法,对于五子棋该算法性能足以. ...
- C++的简单“五子棋”游戏,只是核心代码,资源代码未添加
ChessBoard.h #ifndef __CHESS_BOARD_H__ #define __CHESS_BOARD_H__ #include "DataStruct.h" # ...
- 用c语言实现简单的五子棋
用c语言实现简单的五子棋 这个小游戏是从零开始的实现的,框架灵感来自于小游戏<走迷宫>. 游戏代码配置: 二维数组+简单逻辑+getch读取键盘+windows函数(刷屏,改颜色,改窗口大 ...
- 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)
使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置jdk-15.0.1-免配置路径版提取码:earu免安装版 ...
- 李洪强漫谈iOS开发[C语言-042]-简单计算器
李洪强漫谈iOS开发[C语言-042]-简单计算器
- 谁说C语言很简单?
前两天,Neo写了一篇<语言的歧义>其使用C语言讨论了一些语言的歧义.大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西. 是的,C语言并不简单,让我们来看看 ...
- Linux 用C语言实现简单的shell(2)
不知不觉两周没有发文了,因为“一万美金的福特奖学金答辩”,ACM比赛,网络论文阅读和网络大作业一大堆事把时间冲散了,所以先写一篇博文补上之前一坑. 之前发了一篇关于linux 用C语言实现简单shel ...
- Java语言实现简单FTP软件------>FTP软件主界面的实现(四)
首先看一下该软件的整体代码框架 1.首先介绍程序的主入口FTPMain.java,采用了一个漂亮的外观风格 package com.oyp.ftp; im ...
- Java语言实现简单FTP软件------>源码放送(十三)
Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...
随机推荐
- javascrip总结42:属性操作案例: 点击盒子,改变盒子的位置和背景颜色
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- JAVA中简单的MD5加密类(MD5Utils)
MD5加密分析: JDK API: 获取对象的API: 加密的API: package cn.utils; import java.security.MessageDigest; im ...
- arch+win7 双系统启动引导
笔者的电脑之前已经安装了win7,安装完arch后电脑中存在两个系统,因此需要引导连个系统. 1. 在安装arch时,一般都会安装grub.如果没有安装,则参考arch wiki中 grub2一节安装 ...
- Verilog MIPS32 CPU(九)-- 顶层文件
`timescale 1ns / 1ps /////////////////////////////////////////////////////////////////////////////// ...
- python下使用tesserocr遇到的一些坑
我是在win7 64位系统下用的. 首先是安装tesseract,这个可以去官网下载,我使用的是3.05.1,安装时使用默认安装路径就行了,下载语言包速度很慢很慢,需要等 接下来就是安装tessero ...
- WebSerervice webapi使用
WebSerervice webapi使用 1.传json参数: 2.返回json数据: 3.权限控制: Authorize特性:必须经过认证,请求头必须具有token信息 4.路由: 5.过滤器: ...
- 201621123023《Java程序设计》第3周学习总结
一. 本周学习总结 写出你认为本周学习中比较重要的知识点关键词,如类.对象.封装等 关键字:面向对象,类,对象,构造函数,封装,继承 用思维导图或者Onenote或其他工具将这些关键词组织起来 二.书 ...
- 用Visual Studio 2015 编译张帆的第一个NT式驱动,并且成功安装到Windows XP里面!!!
开发工具:Visual Studio 2015 企业版 目 标 机:Windows XP X86 前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版 ...
- 爬虫开发14.scrapy框架之分布式操作
分布式爬虫 一.redis简单回顾 1.启动redis: mac/linux: redis-server redis.conf windows: redis-server.exe redis-wi ...
- “全栈2019”Java第七十七章:抽象内部类与抽象静态内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...