当前位置: 首页 > article >正文

C语言控制台AI五子棋

程序源码:

#include <windows.h>
#include <conio.h>
#include <stdio.h>
int W = 13, S, M = 0, *m, c = 1, r = 2, z, i, j, k, *p;
int *sum(int *v, int l) {
    return *v - v[l] ? v + l : sum(v + l, l);
}
void down(int v) {
    for (m[v] = r ^= 3, i = 2; j = i % 3 - 1 + i / 3 * W, i < 6; ++i) {
        p = sum(m + v, j), k = (p - sum(m + v, -j)) / j;
        *p || (p[S * r] += 1 << k), p -= k * j, *p || (p[S * r] += 1 << k);
        m[v + S] = m[v + S * 2] = 0, k > 5 && (r ^= 3, r += 4, i = 8);
    }
}
void ai() {
    for (j = k = 0, i = S; i < 3 * S || (k = rand() % k, k || ++k, 0);)
        j == m[i] && ++k, j < m[i] && (j = m[i], k = 1), ++i;
    for (i = S; k && i < 3 * S || (down(i % S), 0);)m[++i] == j && --k;
}
int main() {
    for (W += 2, S = W * W, m = calloc(i = S * 3, 4), srand((int)m); i--;)
        i % W && -~i % W && !(i % S < W || (i + W) % S < W) || (m[i] = -1);
    SetConsoleCursorInfo(GetStdHandle((DWORD)-11), &(CONSOLE_CURSOR_INFO){25});
    for (z = S / 2, system("cls"); r < 4 && c - 27; c = _getch() & 95) {
        c - 87 || m[z - W] + 1 && (z -= W), c - 68 || m[++z] + 1 || --z;
        c - 83 || m[z + W] + 1 && (z += W), c - 65 || m[--z] + 1 || ++z;
        if (!c)M - 2 ? !m[z] && (down(z), r < 4 && M && (ai(), 0)) : ai();
        SetConsoleCursorPosition(GetStdHandle((DWORD)-11), (COORD){0});
        for (i = W; i < S - W; ++i % W || _cprintf("%d\n", i / W - 1))
            SetConsoleTextAttribute(GetStdHandle((DWORD)-11),i - z ? 15 : 175),
                                    m[i] + 1 && printf(". \0○\0●" + m[i] * 3);
        for (i = 1, c - 81 || ++M; ++i < W;)_cprintf(" %c", 95 + i);
        M %= 3, _cprintf("\n%s|", "PvP\0PvE\0EvE" + M * 4);
        _cputs(r & 1 ? "White" : "Black"), r < 4 || _cputs(" win!");
    }
}

操作方式:按WASD移动光标,空格下子,Q键切换模式(PvP,PvE,EvE)

运行结果:


http://www.kler.cn/a/459780.html

相关文章:

  • P5289 [十二省联考 2019] 皮配 做题记录
  • Appium2.0:发生了哪些重大变化?
  • 计算机网络原理(一)
  • Ubuntu执行sudo apt-get update失败的解决方法
  • 电脑主机后置音频插孔无声?还得Realtek高清晰音频管理器调教
  • checked 溢出问题
  • IP组播基础
  • Kubernetes 的资源管理方式(二)
  • Ubuntu网络配置(桥接模式, nat模式, host主机模式)
  • 医疗数仓Hive安装部署
  • Spring cloud GateWay入门
  • 江科大学习笔记之——标准库以及其HAL库LED流水灯
  • Docker--Bitnami/kibana
  • 检索分析服务 Elasticsearch版
  • 搭建android开发环境 android studio
  • 闲谭Scala(3)--使用IDEA开发Scala
  • 专业140+总分410+南京大学851信号与系统考研经验南大电子信息通信集成电路,真题,大纲。参考书。
  • 数据库锁的深入探讨
  • 在Windows上读写Linux磁盘镜像的一种方法
  • ElasticSearch 分布式部署
  • 现在Java面试需要提前准备哪些知识?
  • 仓颉语言实战——3.表达式
  • 如何学习、使用Ai,才能跟上时代的步伐?
  • # 光速上手 - JPA 原生 sql DTO 投影
  • Lucene 漏洞历险记:修复损坏的索引异常
  • 记录一个我在idea启动时的报错