找回密码
注册

QQ登录

独立游戏 >
独立动画 >
独立音乐 >

新版Prefab的一些梳理

前言Unity的Prefab相信大家一定很熟悉了,但是用起来那叫个又爱 ...

《我叫MT4》游戏测评——简单地从交互设计的角度分析

1、进去游戏后,会先播放一段动画。这段CG做得很不错,镜头、人 ...

Unity导入模型出现多层UV问题解决

在做项目优化的时候发现,游戏中的模型占用了很高的内存,然后就 ...

Substance Painter入门学习笔记 -8 油桶制作

【前言】 上一篇介绍了油桶的制作,以及到SP中如何烘焙 ...

Substance Painter入门学习笔记 -7 日记本-3

【前言】 这篇继续研究SP功能,用它绘制前边制作的日记 ...

Substance Painter入门学习笔记 -5

【前言】 继续 【研究】 三、调整和做旧。 首先调整做旧弹体 ...

Substance Painter入门学习笔记 -4

【前言】 继续 Substance Painter 以下简称SP。 【研究】 第二 ...

Substance Painter入门学习笔记 -3

【前言】 前两篇粗略介绍了一下该软件的操作方法。这一篇 ...

Substance Painter入门学习笔记 -2

【前言】 接着上一篇制作。 【学习】 操作三 做旧 现实 ...

Substance Painter入门学习笔记 -6 油桶制作

【前言】 上一篇通过游戏道具制作,初步了解一下Subst ...

作者: 九艺网
查看: 130|回复: 0
搜索

more +最新主题Download

more +社区更新Forums

more +随机图赏Gallery

新版Prefab的一些梳理
《我叫MT4》游戏测评——简单地从交互设计
Unity导入模型出现多层UV问题解决
Substance Painter入门学习笔记 -8 油桶制

more +文章更新News

三维圈夹游戏人机编程[转帖]

[复制链接]
九艺网 发表于 2017-3-10 17:02:23 | 显示全部楼层 |阅读模式
查看: 130|回复: 0

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
三维圈夹游戏人机编程[table=560]
[table=560][tr][td]游戏规则:市面上有一些三维的圈夹游戏商品,最常见的一种有4层透明塑料版,每层有4*4形式的洞。两人玩时轮流把有颜色的棋子放入空着的洞中,最先将4个同色的棋子连成一条线的人赢。连线的方式有许多种,可以是水平的、垂直的,或者有角度的。
分析:4个棋子共有76条可能连成的直线。每一层,与边平行的直线有8条,再加上2条对角线,所以每一层水平的直线就有10条,4层总共就有40条。还有16条垂直线,4条长对角线,以及在8个垂直面中,
每个面上的2条对角线。
设计方案:根据下此棋子的得分来判定:(以黑棋为例)
        (1):在一个空白的直线上加黑棋+1分
            在只有一个白棋的直线上加黑棋+2分
            在只有一个黑棋的直线上加黑棋+3分
            在有两个黑棋的直线上加黑棋+4分
            在有两个白棋的直线上加黑棋+5分
            在有三个黑棋的直线上加黑棋 一定执行。返回成功
            在有三个白棋的直线上加黑棋+100分
        (2):然后,下这个点的棋子影响的直线的得分总和如果最大的就下这个点。

给出代码:
<div class="codesamp">
//此版本不考虑图形的显示在很多属性没有纪录:
#include
#include
#include
#define MAX 100

//pMatixLine<i>[7]纪录了下这个点的棋子与76条直线的那条直线有关
int pMatixLine[64][7]=
{{1,5,9,41,57,61,69},{1,6,42,63,0,0,0},{1,7,43,65,0,0,0},{1,8,10,44,58,67,70},
{2,5,45,71,0,0,0},{2,6,9,46,0,0,0},{2,7,10,47,0,0,0},{2,8,48,72,0,0,0},
{3,5,49,73,0,0,0},{3,6,10,50,0,0,0},{3,7,9,51,0,0,0},{3,8,52,74,0,0,0},
{4,5,10,53,59,62,75},{4,6,54,64,0,0,0},{4,7,55,66,0,0,0},{4,8,9,56,60,68,76},
{11,15,19,41,0,0,0},{11,16,42,69,0,0,0},{11,17,43,70,0,0,0},{11,18,20,44,0,0,0},
{12,15,45,61,0,0,0},{12,16,19,46,57,63,71},{12,17,20,47,58,65,72},{12,18,48,67,0,0,0},
{13,15,49,62,0,0,0},{13,16,20,50,59,64,73},{13,17,19,51,60,66,74},{13,18,52,68,0,0,0},
{14,15,20,53,0,0,0},{14,16,54,75,0,0,0},{14,17,55,76,0,0,0},{14,18,19,56,0,0,0},
{21,25,29,41,0,0,0},{21,26,42,70,0,0,0},{21,27,43,69,0,0,0},{21,28,30,44,0,0,0},
{22,25,45,62,0,0,0},{22,26,29,46,60,64,72},{22,27,30,47,59,66,71},{22,28,48,68},
{23,25,49,61,0,0,0},{23,26,30,50,58,63,74},{23,27,29,51,57,65,73},{23,28,52,67,0,0,0},
{24,25,30,53,0,0,0},{24,26,54,76,0,0,0},{24,27,55,75,0,0,0},{24,28,29,26,0,0,0},
{31,35,39,41,60,62,70},{31,36,42,64,0,0,0},{31,37,43,66,0,0,0},{31,38,40,44,59,68,69},
{32,35,45,72,0,0,0},{32,36,39,46,0,0,0},{32,37,40,47,0,0,0},{32,38,48,71,0,0,0},
{33,35,49,74,0,0,0},{33,36,40,50,0,0,0},{33,37,39,51,0,0,0},{33,38,52,73,0,0,0},
{34,35,40,53,58,61,76},{34,36,54,63,0,0,0},{34,37,55,65,0,0,0},{34,38,39,56,57,67,75}};
typedef enum LineStyle{empty,oneblack,towblack,threeblack,onewhite,towwhite,threewhite,mix,succeed}MyLineStyle;
typedef enum ChessmanStyle{without,chessblack,chesswhite}MyChessmanStyle;
//typedef enum ChessmanStyle{without,have}MyChessmanStyle;
typedef enum CurrentChess{black,white}MyCurrentChess;
//实现根据chess的输入改变alllinestyle影响的线条状态和allchess棋子的状态以方便下此选择的过滤
//返回1成功
int ChangeState(int IFblack,MyLineStyle AllLineStyle[76],int chess,MyChessmanStyle AllChess[64]);
//计算如果下这位置的得分数
//变成有唯一一个自己的+1
//变成有二个的+3
//变成有三个的+4
//变成有四个的+max+1
//破坏对方三个的+max
//破坏对方一个的+2
//破坏对方二个的+5
//从本来就无用的变成有用的+0
//返回-1为成功,必选
int SingleCount(int IFblack,int chess,MyLineStyle AllLineStyle[76]);
//实现选择那个方案最理想返回下的棋子位置
//返回-1无棋子可下
int ProjectSelect(int IFblack,MyLineStyle AllLineStyle[76],MyChessmanStyle AllChess[64]);
//白棋用户的输入状态
int InputChess(int IFblack,MyChessmanStyle AllChess[64]);
//打印棋盘
int chessboard(MyChessmanStyle AllChess[64]);
//打印菜单
char menu();
//人-机游戏
int mantocomputer();
//单机版人与人游戏
int mantoman();
//游戏规则
int ReadMe();
int ChangeState(int IFblack,MyLineStyle AllLineStyle[76],int chess,MyChessmanStyle AllChess[64])
{
int i;
int curline;
if (AllChess[chess]) {printf("Did not chance input ");return 0;}
// AllChess[chess]=have;
if(IFblack)//白棋下
{  
  AllChess[chess]=chesswhite;
  for(i=0;i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表