精华内容
下载资源
问答
  • C++ 井字棋

    2013-12-28 11:48:34
    一个简单的井字棋游戏C++代码。有人机对战和人人对战。
  • c++井字棋AI

    2021-08-19 19:10:15
    c++井字棋AI
  • c++井字棋游戏人机对战

    热门讨论 2009-11-06 09:26:29
    c++井字棋游戏人机对战 void instructions() { cout 欢迎来到井字棋游戏\n"; cout 再这里你将和一块电脑芯片对战\n"; cout 走棋请按0 - 8这些数字.先打入将要下棋的字母\n"; cout ,你的棋就将走到指定位置\n";...
  • c/c++井字棋

    2021-08-01 08:07:36
    c++版本的井字棋 首先先上代码,下面是主函数,我们把功能用函数实现,通过主函数我们可以知道游戏流程。 #include <cstdio> #include <cstdlib> #include <ctime> #include <iostream> ...
    1. c++版本的井字棋
      首先先上代码,下面是主函数,我们把功能用函数实现,通过主函数我们可以知道游戏流程。
    #include <cstdio>
    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    
    int chess[5][5] = {'\0'}, n = 0;                                //定义初始化棋盘数组和步数
    bool end = false;                                               //定义初始化游戏结束判别标志
    
    int main()
    {
    
        int in, first = 0;
        int x, y;
    
        printf("欢迎来到Jack井字棋\n");
        showMenu();
        //根据输入判断游戏进行或退出
        std::cin >> in;
    
        while (in == 1)
        {
            printf("谁先手?你先,请输入0;电脑先,请输入1\n");
            std::cin >> first;
            //根据先后手开始分组,用if-else语句分段
            if (first % 2 == 0)
                while (1)
                {
                    draw();
                    printf("请输入位置x y:\n");
                    std::cin >> x >> y;
                    chess[x - 1][y - 1] = 1;
                    randomDrop();
                    n += 2;
                    draw();
                    switch (judge())
                    {
                    case 0:
                        break;
                    case 1:
                        end = true;
                        printf("你赢了!\n");
                        break;
                    case 2:
                        end = true;
                        printf("你输了。。。。。。\n");
                        break;
                    case 3:
                        end = true;
                        printf("平局\n");
                        break;
                    default:
                        break;
                    }
                    if (end)
                        break;
                }
            else
            {
                draw();
                randomDrop();
                printf("请输入位置x y:\n");
                std::cin >> x >> y;
                chess[x - 1][y - 1] = 1;
                n += 2;
                draw();
                switch (judge())
                {
                case 0:
                    break;
                case 1:
                    end = true;
                    printf("你赢了!\n");
                    break;
                case 2:
                    end = true;
                    printf("你输了。。。。。。\n");
                    break;
                case 3:
                    end = true;
                    printf("平局\n");
                    break;
                default:
                    break;
                }
                if (end)
                    break;
            }
            printf("还想继续吗?(1.yes  2.Thanks)\n");
            int willings;
            std::cin >> willings;
            if (willings != 1)
                break;
        }
        printf("Bye.\n");
        system("pause");
        return 0;
    }
    

    输出菜单函数

    //简单输出开始菜单
    void showMenu()
    {
    
        printf("##################################################\n");
        printf("##                                              ##\n");
        printf("##     1.start                  2.exit          ##\n");
        printf("##                                              ##\n");
        printf("##################################################\n");
    }
    

    棋盘绘制函数

    //根据棋盘数组中数值进行输出,值为1则输出X,值为2则输出O,否则输出空
    int draw()
    {
    
        system("cls");
        printf("");
        for (int i = 0; i < 5; i++)
        {
            printf("|");
            for (int j = 0; j < 5; j++)
            {
                if (chess[i][j] == 1)
                    printf("X");
                else if (chess[i][j] == 2)
                    printf("O");
                else
                    printf(" ");
                printf("|");
            }
            printf("\n-------------\n");
        }
        return 0;
    }
    

    电脑随机落子函数

    //电脑随机落子,根据赋予的随机数进行棋盘数组赋值
    void randomDrop()
    {
    
        int x, y;
        while (1)
        {
            x = rand() % 5;
            y = rand() % 5;
            if (chess[x][y] == '\0')
            {
                chess[x][y] = 2;
                break;
            }
        }
        draw();
    }
    

    当然,还有最后的游戏结果判定函数

    //判别输赢和平局
    //我们赢了,返回1;电脑赢了,返回2;平局则返回3
    //存在还没走完的情况,所以返回0
    int judge()
    {
    
        int i;
        if (n != 25)
        {
            for (i = 0; i < 5; i++)
                if ((chess[i][0] == 1 && chess[i][1] == 1 && chess[i][2] == 1 && chess[i][3] == 1 && chess[i][4] == 1) ||
                    (chess[0][i] == 1 && chess[1][i] == 1 && chess[2][i] == 1 && chess[3][i] == 1 && chess[4][i] == 1))
                    return 1;
                else if ((chess[i][0] == 2 && chess[i][1] == 2 && chess[i][2] == 2 && chess[i][3] == 2 && chess[i][4] == 2) ||
                         (chess[0][i] == 2 && chess[1][i] == 2 && chess[2][i] == 2 && chess[3][i] == 2 && chess[4][i] == 2))
                    return 2;
                else
                    continue;
            //斜对
            if ((chess[0][0] == 1 && chess[1][1] == 1 && chess[2][2] == 1 && chess[3][3] == 1 && chess[4][4] == 1) || (chess[0][4] == 1 && chess[1][3] == 1 && chess[2][2] == 1 && chess[3][1] == 1 && chess[4][0] == 1))
                return 1;
            else if ((chess[0][0] == 2 && chess[1][1] == 2 && chess[2][2] == 2 && chess[3][3] == 2 && chess[4][4] == 2) || (chess[0][4] == 2 && chess[1][3] == 2 && chess[2][2] == 2 && chess[3][1] == 2 && chess[4][0] == 2))
                return 2;
        }
        //看是否平局
        else
            return 3;
        return 0;
    }
    

    由于函数实现有清屏,一张张图片截屏起来很麻烦,我又不想整动态图,这里就不演示结果了。(注:输入要用英文,不然输入缓存有误)
    2. c语言实现井字棋

    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
    void menu();								//输出菜单
    void draw(char chess[][3]);					//描绘棋盘
    char judge(char chess[][3]);				//输赢判定函数
    void random_move();							//电脑落子
    
    int main(){
    
    	int a, count = 0;
    	char chess[3][3] = {'\0'};
    	menu();
    	printf("请选择:\n");
    	scanf("%d", &a);
    	if(a != 1)
    		return 0;
    
    	draw(chess);
    	srand((unsigned)time(NULL));
    
    	while(1){
    		int user_x, user_y;
    		printf("请输入<x/y>: \n");
    		scanf("%d,%d", &user_x, &user_y);
    
    		if((user_x >=1 && user_x <=3) && (user_y >= 1 && user_y <= 3)\
    			&&chess[user_x - 1][user_y - 1] == '\0'){
    			chess[user_x - 1][user_y - 1] = 'X';
    			count++;
    			if(judge(chess) == 'X'){
    				draw(chess);
    				printf("你赢了!\n");
    				break;
    			}
    			if(count == 9){
    				draw(chess);
    				printf("平手。\n");
    				break;
    			}
    
    			random_move(chess);
    			count++;
    			if(judge(chess) == 'O'){
    				printf("你输了!\n");
    				break;
    			}
    		}
    		else
    			continue;
    	}
    	return 0;
    }
    
    void menu(){
    
    	printf("############################################################\n");
    	printf("##		1.play		2.Exit		    	##\n");
    	printf("############################################################\n");
    }
    
    void draw(char chess[][3]){
    
    	system("cls");
    	printf(" %c | %c | %c		Player:X\n", chess[0][0], chess[0][1], chess[0][2]);
    	printf(" -----------		Computer:O\n");
    	printf(" %c | %c | %c \n", chess[1][0], chess[1][1], chess[1][2]);
    	printf(" -----------  \n");
    	printf(" %c | %c | %c \n", chess[2][0], chess[2][1], chess[2][2]);
    }
    
    char judge(char chess[][3]){
    
    	int i;
    	//循环判断三行中是否有一行不为空且同为x或o
    	for(i=0; i < 3; i++){
    		if(chess[i][0] == chess[i][1] && chess[i][1] == chess[i][2] && chess[i][2] != '\0')
    			return chess[i][0];
    	}
    	//循环判断三列中是否有一行不为空且同为x或o
    	for(i=0; i < 3; i++){
    		if(chess[0][i] == chess[1][i] && chess[1][i] == chess[2][i] && chess[2][i] != '\0')
    			return chess[0][i];
    	}
    	//判断斜对行是否有相同且不为空的
    	if(chess[0][0] == chess[1][1] && chess[1][1] == chess[2][2] && chess[2][2] != '\0')
    		return chess[0][0];
    	if(chess[0][2] == chess[1][1] && chess[1][1] == chess[2][0] && chess[2][0] != '\0')
    		return chess[0][2];
    	return "";
    }
    
    void random_move(char chess[][3]){
    
    	int x, y;
    	while(1){
    		x = rand() %3;
    		y = rand() %3;
    		if(chess[x][y] == '\0'){
    			chess[x][y] = "O";
    			break;
    		}
    	}
    	draw(chess);
    }
    
    展开全文
  • 规则: 1.↑↓←→控制移动,【空格】放下棋子 2.棋盘为3 * 3的3 * 3的九宫格的九宫格(好绕啊) 3.当小型九宫格中有三颗你的棋子连成一线,那么这个小的九宫格就属于你的格子,当大型九宫格中的格子连成一线时,你...
  • 「游戏」c++井字棋

    2020-07-11 18:47:41
    这种井字棋,我是考古发现的,编写时前后隔了几天,思路有些混乱,对于凌乱的代码请不要介意 规则: 1.↑↓←→控制移动,【空格】放下棋子 2.棋盘为3 * 3的3 * 3的九宫格的九宫格(好绕啊) 3.当小型九宫格中有三...

    这种井字棋,我是考古发现的,编写时前后隔了几天,思路有些混乱,对于凌乱的代码请不要介意

    规则:
    1.↑↓←→控制移动,【空格】放下棋子
    2.棋盘为3 * 3的3 * 3的九宫格的九宫格(好绕啊)
    3.当小型九宫格中有三颗你的棋子连成一线,那么这个小的九宫格就属于你的棋子格子,当大型九宫格中的格子连成一线时,你就赢了
    4.你所可以下的格子与棋盘的位置关系,是相对应于对手所下的棋子与他所下的格子的关系,当你所可以下的格子已被占据时,你可以在整个棋盘里未被占据或未下棋子的地方下棋
    视频教学【免费】

    #include <bits/stdc++.h>
    #include <windows.h>
    #include <conio.h>
    #include <ctime>
    
    int a[4][4][4][4]; 
    int winer[4][4];
    int x1, yy1, x2, y2;
    int now;
    
    void print(int i, int j, int k, int l) {
    	if(i == x1 && j == yy1 && k == x2 && l == y2) printf("+");
    	else if(winer[i][j] == 1) printf("①");
    	else if(winer[i][j] == 2) printf("②");
    	else if(a[i][j][k][l] == 1) printf("●");
    	else if(a[i][j][k][l] == 2) printf("○"); 
    	else printf("㊣");
    }
    
    void put_map() {
    	printf("┏━━┳━━┳━━┓┏━━┳━━┳━━┓┏━━┳━━┳━━┓\n┃");
    	print(1, 1, 1, 1);
    	printf("┃");
    	print(1, 1, 1, 2);
    	printf("┃");
    	print(1, 1, 1, 3);
    	printf("┃┃");
    	print(1, 2, 1, 1);
    	printf("┃");
    	print(1, 2, 1, 2);
    	printf("┃");
    	print(1, 2, 1, 3);
    	printf("┃┃");
    	print(1, 3, 1, 1);
    	printf("┃");
    	print(1, 3, 1, 2);
    	printf("┃");
    	print(1, 3, 1, 3);
    	printf("┃\n");
    	printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
    	print(1, 1, 2, 1);
    	printf("┃");
    	print(1, 1, 2, 2);
    	printf("┃");
    	print(1, 1, 2, 3);
    	printf("┃┃");
    	print(1, 2, 2, 1);
    	printf("┃");
    	print(1, 2, 2, 2);
    	printf("┃");
    	print(1, 2, 2, 3);
    	printf("┃┃");
    	print(1, 3, 2, 1);
    	printf("┃");
    	print(1, 3, 2, 2);
    	printf("┃");
    	print(1, 3, 2, 3);
    	printf("┃\n");
    	printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
    	print(1, 1, 3, 1);
    	printf("┃");
    	print(1, 1, 3, 2);
    	printf("┃");
    	print(1, 1, 3, 3);
    	printf("┃┃");
    	print(1, 2, 3, 1);
    	printf("┃");
    	print(1, 2, 3, 2);
    	printf("┃");
    	print(1, 2, 3, 3);
    	printf("┃┃");
    	print(1, 3, 3, 1);
    	printf("┃");
    	print(1, 3, 3, 2);
    	printf("┃");
    	print(1, 3, 3, 3);
    	printf("┃\n");
    	printf("┗━━┻━━┻━━┛┗━━┻━━┻━━┛┗━━┻━━┻━━┛\n");
    	
    	printf("┏━━┳━━┳━━┓┏━━┳━━┳━━┓┏━━┳━━┳━━┓\n┃");
    	print(2, 1, 1, 1);
    	printf("┃");
    	print(2, 1, 1, 2);
    	printf("┃");
    	print(2, 1, 1, 3);
    	printf("┃┃");
    	print(2, 2, 1, 1);
    	printf("┃");
    	print(2, 2, 1, 2);
    	printf("┃");
    	print(2, 2, 1, 3);
    	printf("┃┃");
    	print(2, 3, 1, 1);
    	printf("┃");
    	print(2, 3, 1, 2);
    	printf("┃");
    	print(2, 3, 1, 3);
    	printf("┃\n");
    	printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
    	print(2, 1, 2, 1);
    	printf("┃");
    	print(2, 1, 2, 2);
    	printf("┃");
    	print(2, 1, 2, 3);
    	printf("┃┃");
    	print(2, 2, 2, 1);
    	printf("┃");
    	print(2, 2, 2, 2);
    	printf("┃");
    	print(2, 2, 2, 3);
    	printf("┃┃");
    	print(2, 3, 2, 1);
    	printf("┃");
    	print(2, 3, 2, 2);
    	printf("┃");
    	print(2, 3, 2, 3);
    	printf("┃");
    	puts("");
    	printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
    	print(2, 1, 3, 1);
    	printf("┃");
    	print(2, 1, 3, 2);
    	printf("┃");
    	print(2, 1, 3, 3);
    	printf("┃┃");
    	print(2, 2, 3, 1);
    	printf("┃");
    	print(2, 2, 3, 2);
    	printf("┃");
    	print(2, 2, 3, 3);
    	printf("┃┃");
    	print(2, 3, 3, 1);
    	printf("┃");
    	print(2, 3, 3, 2);
    	printf("┃");
    	print(2, 3, 3, 3);
    	printf("┃");
    	puts("");
    	printf("┗━━┻━━┻━━┛┗━━┻━━┻━━┛┗━━┻━━┻━━┛\n");
    	printf("┏━━┳━━┳━━┓┏━━┳━━┳━━┓┏━━┳━━┳━━┓\n┃");
    
    	print(3, 1, 1, 1);
    	printf("┃");
    	print(3, 1, 1, 2);
    	printf("┃");
    	print(3, 1, 1, 3);
    	printf("┃┃");
    	print(3, 2, 1, 1);
    	printf("┃");
    	print(3, 2, 1, 2);
    	printf("┃");
    	print(3, 2, 1, 3);
    	printf("┃┃");
    	print(3, 3, 1, 1);
    	printf("┃");
    	print(3, 3, 1, 2);
    	printf("┃");
    	print(3, 3, 1, 3);
    	printf("┃");
    	puts("");
    	printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
    	print(3, 1, 2, 1);
    	printf("┃");
    	print(3, 1, 2, 2);
    	printf("┃");
    	print(3, 1, 2, 3);
    	printf("┃┃");
    	print(3, 2, 2, 1);
    	printf("┃");
    	print(3, 2, 2, 2);
    	printf("┃");
    	print(3, 2, 2, 3);
    	printf("┃┃");
    	print(3, 3, 2, 1);
    	printf("┃");
    	print(3, 3, 2, 2);
    	printf("┃");
    	print(3, 3, 2, 3);
    	printf("┃");
    	puts("");
    	printf("┣━━╋━━╋━━┃┃━━╋━━╋━━┃┃━━╋━━╋━━┫\n┃");
    	print(3, 1, 3, 1);
    	printf("┃");
    	print(3, 1, 3, 2);
    	printf("┃");
    	print(3, 1, 3, 3);
    	printf("┃┃");
    	print(3, 2, 3, 1);
    	printf("┃");
    	print(3, 2, 3, 2);
    	printf("┃");
    	print(3, 2, 3, 3);
    	printf("┃┃");
    	print(3, 3, 3, 1);
    	printf("┃");
    	print(3, 3, 3, 2);
    	printf("┃");
    	print(3, 3, 3, 3);
    	printf("┃");
    	puts("");
    	printf("┗━━┻━━┻━━┛┗━━┻━━┻━━┛┗━━┻━━┻━━┛\n");
    }
    
    bool p(int k) {
    	int temp1 = 0, temp2 = 0;
    	if(x2 == y2 || x2 + y2 == 4) {
    		if(a[x1][yy1][1][1] == k && a[x1][yy1][2][2] == k && a[x1][yy1][3][3] == k) {
    			return true;
    		}
    		if(a[x1][yy1][1][3] == k && a[x1][yy1][2][2] == k && a[x1][yy1][3][1] == k) {
    			return true;
    		}
    	}
    	for(int i = 1; i <= 3; i ++) {
    		if(a[x1][yy1][x2][i] == k) ++ temp1;
    		if(a[x1][yy1][i][y2] == k) ++ temp2;
    	}
    	return temp1 == 3 || temp2 == 3;
    }
    
    bool bp(int k) {
    	int temp1 = 0, temp2 = 0;
    	if(x1 == yy1 || x1 + yy1 == 4) {
    		if(winer[1][1] == k && winer[2][2] == k && winer[3][3] == k) {
    			return true;
    		}
    		if(winer[1][3] == k && winer[2][2] == k && winer[3][1] == k) {
    			return true;
    		}
    	}
    	for(int i = 1; i <= 3; i ++) {
    		if(winer[x1][i] == k) ++ temp1;
    		if(winer[i][yy1] == k) ++ temp2;
    	}
    	return temp1 == 3 || temp2 == 3;
    }
    
    void run() {
    	x1 = yy1 = x2 = y2 = 2;
    	while(true) {
    		now %= 2;
    		now += 1;
    		system("cls");
    		put_map();
    		printf("玩家%d", now);
    		int temp1 = x1, temp2 = yy1;
    		while(true) {
    			if(x2 == 0) {
    				x1 --;
    				x2 = 3;
    				system("cls");
    				put_map();
    				printf("玩家%d", now);
    			}
    			if(x2 == 4) {
    				x1 ++;
    				x2 = 1;
    				system("cls");
    				put_map();
    				printf("玩家%d", now);
    			}
    			if(y2 == 0) {
    				yy1 --;
    				y2 = 3;
    				system("cls");
    				put_map();
    				printf("玩家%d", now);
    			}
    			if(y2 == 4) {
    				yy1 ++;
    				y2 = 1;
    				system("cls");
    				put_map();
    				printf("玩家%d", now);
    			}
    			if(kbhit()) {
    				char ch = getch();
    				if(ch == -32) {
    					ch = getch();
    					if(winer[temp1][temp2] == 0) {
    						if(ch == 72 && x2 > 1) {
    							-- x2;
    							system("cls");
    							put_map();
    							printf("玩家%d", now);
    						}
    						else if(ch == 80 && x2 < 3) {
    							++ x2;
    							system("cls");
    							put_map();
    							printf("玩家%d", now);
    						}
    						else if(ch == 75 && y2 > 1) {
    							-- y2;
    							system("cls");
    							put_map();
    							printf("玩家%d", now);
    						}
    						else if(ch == 77 && y2 < 3) {
    							++ y2;
    							system("cls");
    							put_map();
    							printf("玩家%d", now);
    						}
    					}
    					else {
    						if(ch == 72 && (x1 != 1 || x2 != 1)) {
    							-- x2;
    							system("cls");
    							put_map();
    							printf("玩家%d", now);
    						}
    						else if(ch == 80 && (x1 != 3 || x2 != 3)) {
    							++ x2;
    							system("cls");
    							put_map();
    							printf("玩家%d", now);
    						}
    						else if(ch == 75 && (yy1 != 1 || y2 != 1)) {
    							-- y2;
    							system("cls");
    							put_map();
    							printf("玩家%d", now);
    						}
    						else if(ch == 77 && (yy1 != 3 || y2 != 3)) {
    							++ y2;
    							system("cls");
    							put_map();
    							printf("玩家%d", now);
    						}
    					}
    				}
    				else if(ch == ' ' && a[x1][yy1][x2][y2] == 0 && winer[x1][yy1] == 0) {
    					system("cls");
    					put_map();
    					printf("玩家%d", now);
    					a[x1][yy1][x2][y2] = now;
    					if(p(now)) {
    						winer[x1][yy1] = now;
    						if(bp(now)) {
    							system("cls");
    							printf("玩家%d赢了", now);
    							return;
    						}
    					}
    					x1 = x2;
    					yy1 = y2;
    					x2 = 2;
    					y2 = 2;
    					break;
    				}
    			}
    		}
    	}
    }
    
    int main() {
    	run();
    	return 0;
    } 
    
    展开全文
  • C++井字棋游戏,DOS界面版

    千次阅读 2014-05-25 00:34:27
    正题,今天无聊写了个井字棋游戏,顺便逐渐让自己习惯良好的代码风格,放上来给新手学习学习。 jzq2.cpp /* N字棋游戏PVP版,DOS版 本棋盘可扩充,只需调整检测条件即可,其他接口不需改变。 非人机对战型,PVP...

    据说有一个能保证不败的算法,明天看看先再写个PVC版的。

    正题,今天无聊写了个井字棋游戏,顺便逐渐让自己习惯良好的代码风格,放上来给新手学习学习。

    jzq2.cpp

    /*
    	N字棋游戏PVP版,DOS版
    	本棋盘可扩充,只需调整检测条件即可,其他接口不需改变。
    	非人机对战型,PVP类型;
    	@author:天下无双
    	@date:2014-5-25
    	@version:1.0
    */
    #include <iostream>
    #include <string>
    #define INVALIDINDEX -1
    #define FULL -2
    #define OK 0
    #define WIN 1
    #define ISIN -3
    using namespace std;
    struct box{ //用box代表棋盘上每一个格子
    	int chess;//用一种颜色代表棋子,black和white
    	int status;//0代表该格子没有棋子,1代表已经有了棋子
    };
    enum COLOR{black,white};
    class chessBoard
    {
    private:
    		
    		static const int MAXROW=10;
    		static const int MAXCOLUMN=10;
    		int row;
    		int column;
    		int blackBox;//剩余棋盘格子数,即可落棋点
    		box arr[MAXROW][MAXCOLUMN];
    		void setRow(int r){row=r;};
    		void setCol(int c){column=c;};
    		int GetRow()const{return row;};
    		int GetCol()const{return column;};
    public:
    		chessBoard(int r,int col){
    		if(r>MAXROW||col>MAXCOLUMN){
    			cerr<<"棋盘大小超出范围"<<endl;
    			setRow(MAXROW);
    			setCol(MAXCOLUMN);
    		}else{
    			setRow(r);	
    			setCol(col);
    			//int rr=GetRow();
    			//int cc=GetCol();
    			//blackBox=r*col;//初始化可落棋点//无法在这里设置blackBox,这是什么情况?
    		}
    			initialize();
    			creat();
    		}
    	void initialize()
    	{
    		int r=chessBoard::GetRow();
    		int col=chessBoard::GetCol();
    		blackBox=r*col;
    		for(int i=0;i<r;i++)
    			for(int j=0;j<col;j++)
    			{
    				arr[i][j].chess=-1;
    				arr[i][j].status=0;
    			}
    		
    	}
    
    	//超出范围,返回 INVALIDINDEX -1
    	//已经赢了,返回 WIN 1
    	//棋盘满了,返回 FULL -2
    	//正常落棋  返回 OK 0
    	//该点存在棋子  返回 ISIN -3
    	int insertChess(int i,int j,COLOR c)//落棋	//仅提供落棋接口
    	{
    		int r=chessBoard::GetRow();
    		int col=chessBoard::GetCol();
    		if(i<0||j<0||i>=r||j>=col)
    			return INVALIDINDEX;
    		//if(c!=black&&c!=white)
    			//return INVALIDINDEX;
    		if(arr[i][j].status==0){//将棋子落入棋盘
    			arr[i][j].chess=c;
    			arr[i][j].status=1;//标识此格
    			flush();//刷新
    			blackBox--;
    			if(isGameOver())
    				return WIN; 
    			if(isFull())
    				return FULL;
    			return OK;
    		}
    		return ISIN;
    	}	
    
    protected:
    		void creat(){//初始化棋盘
    			int r=chessBoard::GetRow();
    			int col=chessBoard::GetCol();
    			for(int i=0;i<r;i++){
    				for(int j=0;j<col-1;j++){
    						cout<<" |";
    			}
    				cout<<endl;
    			}
    		};
    
    		void flush(){//重绘棋盘
    
    			system("cls");
    			int r=chessBoard::GetRow();
    			int col=chessBoard::GetCol();
    			for(int i=0;i<r;i++){
    				for(int j=0;j<col;j++){
    					if(white==arr[i][j].chess)
    						cout<<"0";
    					else if(black==arr[i][j].chess)
    						cout<<"*";
    					else
    						cout<<" ";
    					if(j!=col-1)
    						cout<<"|";
    			}
    				cout<<endl;
    			}
    		}
    
    		bool isFull()const{//判断棋盘是否已经落满棋子
    			return blackBox==0;
    		};
    
    		bool isEmpty()const{;//判断棋盘是否为空
    			return blackBox==GetRow()*GetCol();
    		};
    		//由棋盘自己检测是否已经满了。
    		//或者游戏是否结束
    		bool isFinish()const{//检测棋盘是否已满
    			return isFull();//若棋盘满了,则游戏结束
    		};
    
    		bool isGameOver()const{
    			int r=chessBoard::GetRow();
    			int col=chessBoard::GetCol();
    			int color=-1;
    			for(int i=0;i<r;i++){//检测每一行,是否连成一排,
    				if(arr[i][0].chess==black||arr[i][0].chess==white)
    				   color=arr[i][0].chess;//如果每行的第一个box有内容且为black||white
    				else
    					continue;//检测下一行
    				for(int j=1;j<col;j++){
    					if(color==arr[i][j].chess)//如果后面的跟第一个颜色相同
    						if(col==j+1){//如果到了比较最后一个且相等时
    							string colors;
    							if(color==1)
    								colors="white";
    							else
    								colors="black";
    							//cout<<endl<<colors<<" is winner!"<<endl;
    							cout<<endl<<"恭喜"<<colors<<"赢得了本次游戏!"<<endl;
    							return true;
    						}
    						else		//如果不是最后一个,继续比较
    							continue;
    					else	//如果颜色不同
    						break;
    				}	
    			}
    			//检测每一列
    			for(int i=0;i<col;i++){//检测每一列,是否连成一排,
    				if(arr[0][i].chess==black||arr[0][i].chess==white)
    				   color=arr[0][i].chess;//如果每列的第一个box有内容且为black||white
    				else
    					continue;//检测下一列
    				for(int j=1;j<r;j++){
    					if(color==arr[j][i].chess)//如果后面的跟第一个颜色相同
    						if(r==j+1){//如果到了比较最后一个且相等时
    							string colors;
    							if(color==1)
    								colors="white";
    							else
    								colors="black";
    							//cout<<endl<<colors<<" is winner!"<<endl;
    							cout<<endl<<"恭喜"<<colors<<"赢得了本次游戏!"<<endl;
    							return true;
    						}
    						else		//如果不是最后一个,继续比较
    							continue;
    					else	//如果颜色不同
    						break;
    				}	
    			}
    			//检测正对角线
    			color=arr[0][0].chess;
    			bool falg=false;
    			if(color==black||color==white)//第一格是否有棋子
    					falg=true;
    			if(falg) //如果有棋子
    				for(int i=1,j=1;i<r&&j<col;i++,j++){
    					if(arr[i][j].chess==color)
    						if(i==r-1){
    							string colors;
    							if(color==1)
    								colors="white";
    							else
    								colors="black";
    							//cout<<endl<<colors<<" is winner!"<<endl;
    							cout<<endl<<"恭喜"<<colors<<"赢得了本次游戏!"<<endl;
    							return true;
    						}
    						else
    							continue;
    					else
    						break;
    			}
    			//检测侧对角线	X
    			color=arr[r-1][0].chess;
    			falg=false;
    			if(color==black||color==white)//第一格是否有棋子
    					falg=true;
    			if(falg) //如果有棋子
    				for(int i=r-2,j=1;i>=0&&j<col;i--,j++){
    					if(arr[i][j].chess==color)
    						if(i==0){
    							string colors;
    							if(color==1)
    								colors="white";
    							else
    								colors="black";
    							//cout<<endl<<colors<<" is winner!"<<endl;
    							cout<<endl<<"恭喜"<<colors<<"赢得了本次游戏!"<<endl;
    							return true;
    						}
    						else
    							continue;
    					else
    						break;
    			}
    					return false;//如果都不满足,说明游戏还没有结束
    		};
    };
    main.cpp

    #include <iostream>
    #include "jzq2.cpp"
    using namespace std;
    int main()
    {	
    	//3,3代表棋盘为3*3,并且是指三个一排即为胜利
    	//同样的,5,5代表5字棋,但是棋盘大小也是5*5
    	//扩展棋盘将在下一版本推出
    	chessBoard cb(3,3);
    	int status;
    	COLOR c=black;//记录下一步轮到谁走
    	int x,y;
    	bool falg=false;//用于记录是否成功落棋
    	bool isExit=false;//用于记录游戏是否结束
    	while(!isExit)
    	{
    		cout<<"\n\"0\"代表white,\"*\"代表black"<<endl;
    		cout<<"请输入落棋点:如(1,1)则输入:1 1"<<endl;
    		string colors;
    		if(c==black)
    			colors="black";
    		else
    			colors="white";
    		cout<<"现在轮到"<<colors<<"走下一步棋:";
    		cin>>x>>y;
    		/*
    		if(falg)
    			c=c==black?white:black;//换人走
    			*/
    		status=cb.insertChess(x,y,c);
    		switch(status){
    	//超出范围,返回 INVALIDINDEX -1
    	//已经赢了,返回 WIN 1
    	//棋盘满了,返回 FULL -2
    	//正常落棋  返回 OK 0
    		case 0:falg=true;
    				c=c==black?white:black;//如果成功落棋,换人走下一步棋
    				break;
    		case -1:cout<<"\n\n输入坐标不对,超出范围"<<endl;
    				falg=false;
    				break;
    		case 1:cout<<"\n\n游戏结束!"<<endl;
    				falg=false;
    				isExit=true;
    				break;
    		case -2:cout<<"\n\n棋盘已满!"<<endl;
    				cout<<"\n\n游戏即将结束!"<<endl;
    				falg=false;
    				isExit=true;
    				break;
    		case -3:cout<<"\n\n该点已有棋子"<<endl;
    				falg=false;
    				break;
    		}
    	}
    	cin.get();
    	cin.get();
    };

    已经测试过了3*3的无BUG,当然前提是你输入的是数字。你要是输入字母的话,果断崩!

    先放到PVP的来玩玩,哈哈哈。

    今天跑去多益网络机试,回来的途中居然想起来最后一道题少写了一个判断,郁闷。

    还有一道回来的途中才大概想了出来。

    郁闷ing......

    好了,睡了,各位晚安。

    展开全文
  • 心血来潮写了个井字棋,其中肯定有非常多值得优化的地方,一起交流吧 第一个CPP文件: #include<iostream> using namespace std; #include<string> #include"print_chessBoard.h" extern char ...

    刚学C++没多久

    心血来潮写了个井字棋,其中肯定有非常多值得优化的地方,一起交流吧

    第一个CPP文件:

    #include<iostream>
    using namespace std;
    #include<string>
    #include"print_chessBoard.h"
    extern char chessBoard[3][3];
    extern int step_chess;
    int flag_win = 0 ;
    void print_chessBoard()//这个函数的逻辑是参考一篇文章 然后自己修改了一点 
    {
        
    
        for (int row = 2; row > -1; row--) {
            printf("| %c | %c | %c |\n", 
            chessBoard[row][0],chessBoard[row][1], chessBoard[row][2]);
    
        }
    }
    
    void judgment()
    {
        for (size_t i = 0; i < 3; i++)
        {
            if (chessBoard[i][0] == 0x58 && chessBoard[i][1] == 0x58 && chessBoard[i][2] == 0x58)
            {
                flag_win = 2;
            }
            if (chessBoard[i][0] == 0x30 && chessBoard[i][1] == 0x30 && chessBoard[i][2] == 0x30)
            {
                flag_win = 1;        
            }
        }
        for (size_t i = 0; i < 3; i++)
        {
            if (chessBoard[0][i] == 0x58 && chessBoard[1][i] == 0x58 && chessBoard[2][i] == 0x58)
            {
                flag_win = 2;
            }
            if (chessBoard[0][i] == 0x30 && chessBoard[1][i] == 0x30 && chessBoard[2][i] == 0x30)
            {
                flag_win = 1;
            }
        }
        if (chessBoard[0][0] == 0x58 &&  chessBoard[1][1] == 0x58 && chessBoard[2][2] == 0x58)
        {
            flag_win = 2;
        }
        if (chessBoard[0][0] == 0x30 && chessBoard[1][1] == 0x30 && chessBoard[2][2] == 0x30)
        {
            flag_win = 1;
        }
        if (chessBoard[0][2] == 0x58 && chessBoard[1][1] == 0x58 && chessBoard[2][0] == 0x58)
        {
            flag_win = 2;
        }
        if (chessBoard[0][2] == 0x30 && chessBoard[1][1] == 0x30 && chessBoard[2][0] == 0x30)
        {
            flag_win = 1;
        }
    
        if ((step_chess >= 8)&& (flag_win == 0))
        {
            cout << "\n双方平局\n";
            over_game();
        }
        if (flag_win == 1)
        {
            cout << "\n恭喜 0 选手赢得了比赛\n";
            over_game();
        }
        if (flag_win == 2)
        {
            cout << "\n恭喜 X 选手赢得了比赛\n";
            over_game();
        }
    
    }
    
    
    void over_game()
    {
        int name_1;
            cout << "\n\n再玩一局按 1 \n结束按 2\n";
            cin >> name_1;
            if (name_1 == 2)
            {
                flag_win = 3;
            }
            if (name_1 == 1)
            {
                flag_win = 0;
                step_chess = -1;
                for (size_t i = 0; i < 3; i++)
                {
                    for (size_t j = 0; j < 3; j++)
                    {
                        chessBoard[i][j] = ' ';
                    }
                }
                system("cls");
                print_chessBoard();
                cout << "请输入您的要下的位置1~9 \n先手是 0 \n后手是 X \n";
            }
            
    
    }
    
    
    
    
    
    

    第二个CPP文件:

    #include<iostream>
    using namespace std;
    #include<string>
    #include"print_chessBoard.h"
    int step_chess = -1;
    char chessBoard[3][3]={ 
        ' ',' ', ' ',
        ' ',' ', ' ',
        ' ',' ', ' ' };
    extern int flag_win;
    
    int main()
    {
    
        int name;
        int chessBoard_X;
        int chessBoard_Y;
        //print_chessBoard();
    
    
        while (1)
        {
            
            
            print_chessBoard();
            cout << "请输入您的要下的位置1~9 \n先手是 0 \n后手是 X \n";
            judgment();
            if (flag_win == 3)
            {
                break;
            }
            cin >> name;
            step_chess++;
            chessBoard_Y = (name - 1) % 3;
            chessBoard_X = name / 3.1;
            if (step_chess % 2 == 1 )
            {
                chessBoard[chessBoard_X][chessBoard_Y] = 'X';
            }
            if (step_chess % 2 == 0)
            {
                chessBoard[chessBoard_X][chessBoard_Y] = '0';
            }
            system("cls");
            
            
        }
        system("pause");
        return 0;
    
    }

    头文件h部分:

    #ifndef PRINT_CHESSBOARD_H
    #define PRINT_CHESSBOARD_H
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    
    void print_chessBoard();
    void judgment();
    void over_game();
    #endif

    包括个头文件都搞半天😅,不知道哪里错了, 实在是尴尬 第一次写很多地方磕磕碰碰的,好在有一点点收获

    最后得到的效果图:

     

    使用规则,键盘右边的1~9对应着井字棋的九个格子,先手是 0,后手是 1,比赛结束后会判断赛局情况,如果想再玩一局则按1,结束游戏则按2.

    (这个小游戏可以自嗨或者和朋友一起玩      哈哈哈哈哈)

    展开全文
  • C++实现井字棋游戏

    2020-08-18 17:04:49
    主要为大家详细介绍了C++实现井字棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • C++局域网井字棋

    2014-04-06 16:27:52
    C++局域网井字棋
  • c++课设 井字棋游戏

    2013-07-11 15:57:25
    计算机学院 c++课程设计 井字棋游戏mfc
  • 基于C++井字棋游戏

    2017-12-21 15:46:14
    用vC++编写的井字棋游戏,可以选择先后顺序和执X或O。
  • C++ socket 井字棋

    2021-07-19 15:22:36
    C++ socket 井字棋 head.h #include <iostream> #define SERVERPORT 3333 using namespace std; char m[3][3], p1 = 'a', p2 = 'b'; //初始化 void init() { for (int i = 0; i < 3; i++) ...
  • 井字棋c++一个

    2013-12-30 14:27:07
    井字棋c++编写。vc++6.0可运行
  • c++ ten超级井字棋程序

    2016-08-27 18:02:12
    使用mcts算法的近似ai,能够对战ten(超级井字棋),能够输出胜率和调整计算难度。超级井字棋:9个九宫格,每个玩家落子的格子由另一个玩家的落子决定。 玩家在任意一个九宫格井字棋胜利则占领这个九宫格,最终在9个...
  • c++ ten超级井字棋源码

    2016-08-27 18:03:38
    使用mcts算法的近似ai,能够对战ten(超级井字棋),并且能够输出胜率和调整计算难度。超级井字棋:9个九宫格,每个玩家落子的格子由另一个玩家的落子决定。 玩家在任意一个九宫格井字棋胜利则占领这个九宫格,最终...
  • 井字棋c++程序

    2015-03-23 21:13:29
    c++写的井字棋,本人运行成功过,很容易懂得。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 683
精华内容 273
关键字:

c++井字棋

c++ 订阅