【C语言】自制简易五子棋(源码分享)

【C语言】五子棋代码

初学C语言写的第一个程序(从0开始完全自己思考实现的)
程序介绍:【C语言】用c语言实现简单的五子棋

//!!!如果出现乱码请删除 第12 行 

#include<stdio.h>
#include<string.h>
#include<conio.h>      //用于getch取键盘输入字符 
#include<windows.h>    //用于刷屏 

int main()
{
    int x,y,i,p,q,num = 1,check;
    char ch, turn,temp;
    system("mode con cols=38 lines=30");      //迷你界面 
    system("color 30"); 
    printf("<<游戏规则>>:!!!!!!!!!!!!!!!!\n\n");
    printf("<wasd双方轮流控制指针下棋>\n<键盘输入大小写‘L’都视为确认>\n");
    printf("\n<任意按钮开始游戏>\n\n");
  
    char map[1000][1000]= {  "||==================================||",
                             "||   x      ||欢乐五子棋||     o    ||",
                             "||          ==============          ||",
                             "[====================================]",
                             "[[==================================]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[                                  ]]",
                             "[[==================================]]",
                             "[====================================]"
                          };
    for(i = 0; i < 22; i++)
        puts(map[i]);
    
    x = 10,y = 18;
    temp = map[x][y];           //temp是关键:保存光标所指坐标上一次的状态 ,方便恢复与新建状态 

    while(num)                 //主程序:实现移动光标并指定坐标下棋 
    {                          //保证不出界,且保证已下棋位置不会再次被覆盖 
        if(num % 2 != 0){
        	turn = 'x';
			printf("轮到 %c 下了\n这是你的第 %d 步棋\n",turn,(num + 1) / 2); 
		}
        else{
        	turn = 'o';
        	printf("这是 %c 的回合\n这是你的第 %d 步棋\n",turn,num /2);
		} 
		if(num > 544)
			return 0;
		else if(num > 540)
		 	printf("有的惊喜就是在你也想不到的的情况下发生"); 
		else if( num > 500)
        	printf("填满有惊喜喔") ;
		else if( num > 200)
        	printf("你可以填满棋盘的"); 
		else if( num > 150)
        	printf("你眼睛不花吗") ;
		else if( num > 100)
        	printf("还没有分出胜负ne ") ;	
		else if( num > 80) 
        	printf("距离成功不远了") ; 
		else if( num > 50)
        	printf("看来你还能继续下") ;
		else if( num > 30)
        	printf("你还能清楚的看清棋盘吗?") ;
		
		
		else if( num > 20)
        	printf("快接近胜利了吗?\n") ;
		
		
	
		
        
         
		
		   
        ch = getch();
        if ( ch == 's')         //下移 
        {
            if( map[x+1][y]!= '=' &&map[x+1][y]!= ']' &&map[x+1][y]!= '[')
            {
                map[x][y] = temp;
                x++;
                temp = map[x][y];
                map[x][y] = turn;
            }
        }
        else if ( ch == 'a')    //左移 
        {
            if( map[x][y-1]!= '=' && map[x][y-1]!= '[' && map[x][y-1]!= ']')
            {
                map[x][y] = temp;
                y--;
                temp = map[x][y];
                map[x][y] = turn;
            }
        }
        else if ( ch == 'w')    //上移 
        {
            if(  map[x-1][y]!= '=' && map[x-1][y]!= '[' &&  map[x-1][y]!=  ']')
            {
                map[x][y] = temp;
                x--;
                temp = map[x][y];
                map[x][y] = turn;
            }
        }
        else if ( ch == 'd')    //右移 
        {
            if( map[x][y+1]!= '=' &&map[x][y+1]!= '[' &&map[x][y+1]!= ']')
            {
                map[x][y] =temp;
                y++;
                temp = map[x][y];
                map[x][y] = turn;
            }
        }
        else if( ch == 'l' || ch =='L')   //确认下棋后改变坐标状态,并且判断是否伍连。 
        {
            if(temp == ' ')
            {
                map[x][y] = turn;
                temp = map[x][y];
                num++;
                
                
                check=1;                                //判断水平方向 
                {
                    p=x;
                    q=y;
                    q--;
                    
                    if( q >=0&& q<  38)
                    while(q >=0&& q< 38  &&  map[p][q]== turn)//防止数组下标越界
                    {
                    	check++;
                   		q--;
                    }  
                    p=x;
                    q=y;
                    q++;
                    
                    if( q >=0&& q< 38 )
                    while(q >=0&& q<  38 &&  map[p][q] == turn)//防止数组下标越界
                    {
                    	check++;
                    	q++;
                    } 
                    if(check  >= 5 ){
                    printf("%c win the game\n按任意键退出游戏",turn);
                    return 0;}
                                                       
                }
                
                
                check=1;								//判断垂直方向 
                {
                    p=x;
                    q=y;
                    p--;
                    
                    if( p >=0&& p<= 22)
	                    while(p >=0&& p<= 22  &&  map[p][q]== turn)//防止数组下标越界
	                    {
	                    	check++;
	                   		p--;
	                    }  
                    p=x;
                    q=y;
                    p++;
                    
                    if( p >=0&& p<= 22 )
	                    while(p >=0&& p<=  22 &&  map[p][q] == turn)//防止数组下标越界
	                    {
	                    	check++;
	                    	p++;
	                    } 
	                if(check  >= 5 ){
	                printf("%c win the game\n按任意键退出游戏",turn);
                    return 0;}
                }
                check=1;                                //判断左斜方向 
                {
                    p=x;
                    q=y;
                    q--;
                    p--; 
                    
                    if( q >=0&& q<  38 && p >=0 && p <= 22)
                    while(q >=0&& q<  38 && p >=0 && p <= 22 &&  map[p][q]== turn)//防止数组下标越界
                    {
                    	check++;
                   		q--;
                   		p--;
                    }  
                    p=x;
                    q=y;
                    q++;
                    p++;
                    if( q >=0&& q<  38 && p >=0 && p <= 22 )
                    while(q >=0&& q<  38 && p >=0 && p <= 22 && map[p][q] == turn)//防止数组下标越界
                    {
                    	check++;
                    	q++;
                    	p++; 
                    } 
                    if(check  >= 5 ){
                    printf("%c win the game\n按任意键退出游戏",turn);
                    return 0;}
                    
                    check=1;                                //判断右斜方向 
                {
                    p=x;
                    q=y;
                    q++;
                    p--; 
                    
                    if( q >=0&& q<  38 && p >=0 && p <= 22)
                    while(q >=0&& q<  38 && p >=0 && p <= 22 &&  map[p][q]== turn)//防止数组下标越界
                    {
                    	check++;
                   		q++;
                   		p--;
                    }  
                    p=x;
                    q=y;
                    q--;
                    p++;
                    if( q >=0&& q<  38 && p >=0 && p <= 22 )
                    while(q >=0&& q<  38 && p >=0 && p <= 22 && map[p][q] == turn)//防止数组下标越界
                    {
                    	check++;
                    	q--;
                    	p++; 
                    } 
                    if(check  >= 5 ){
                    printf("%c win the game\n按任意键退出游戏",turn);
                    return 0;}
                                                       
                }                                    
                }
            }
            else if( temp =='o') {
                printf("此处不可以下棋!!\n");
                Sleep(500);
            }
            else if( temp =='x') {
                printf("此处不可以下棋!!\n");
                Sleep(500);
            }


        }
        system("cls");
        for(i = 0; i < 25; i++)
            puts(map[i]);
    }

}
posted @ 2020-10-27 12:58  404name  阅读(169)  评论(0编辑  收藏  举报