分享我的#C语言学习之路

家人们,进击的菜鸟又学到一个三子棋游戏,很好玩;不要被代码的数量所困惑,一个算法一个算法的实现,真的不是很难,虽然当代码出错的时候会有崩溃的感觉,但是代码运行成功后,还是非常有成就感的。非常建议从主函数出发,然后根据函数调用的顺序找思路。

整体思路是:游戏菜单选择——>数组初始化——>打印棋盘——>玩家下棋,电脑下棋——>判断输赢情况

#define _CRT_SECURE_NO_WARNINGS 1
//定义行数和列数
#define R 3
#define C 3
#include <time.h>//time函数
#include <stdlib.h>//srand函数
#include <stdio.h>


//不管开始输入的值是什么,都会给棋盘初始化
void Initboard(char board[R][C],int r, int c)
{
    int i=0;
    int j=0;
    { for(i=0;i<r;i++)
        for(j=0;j<c;j++)
        {    
            board[i][j]=' ';
        }
    }

}

//前后空格,中间数据           |   |   
//打印---|                 ---|---|---
//打印---|                 ---|---|---
//前后空格,中间数据           |   |
void dayinboard(char board[R][C],int m,int n)
{
    int i=0;
    int j=0;
    for(i=0;i<m;i++)
      {   
          //打印空里面的数据加右边的"|"
          for(j=0;j<n;j++)
            {printf(" %c ",board[i][j]);
             if(j<n-1)//表示不要最后一列的"|"
             printf("|");}
      printf("\n");//表示打印一行就换行
      if(i<m-1)//最后一行不用打印"---"
      {
          //打印"---|"
          for(j=0;j<n;j++)
        {  printf("---");
          if(j<n-1)//表示不要最后一列的"|"
          printf("|");
      }}
      printf("\n"); //打印完一行就换行;
    }
}

//玩家下子;
void playmove(char board[R][C],int o,int p)
{
    int x,y;
    printf("玩家走:>\n");
    while(1)
    {
    printf("请输入要下的坐标: > ");
    scanf("%d%d",&x,&y);
    //判断x,y坐标的合法性;玩家下意识的认为第一个格子的坐标为(1,1),而实际的数组坐标为(0,0)
    if(x>=1&&x<=o && y>=1&&y<=p)
       {
        if(board[x-1][y-1]==' ')
         {board[x-1][y-1]='*';
             break;
         }
        else
            printf("该坐标已被占用\n");
        }
    else
       {
        printf("没有此坐标,请重新输入\n");
        }
    }
}


//电脑随机下子;
void computermove(char board[R][C],int d,int e )
{
    //电脑随机走 
    int x,y;
    printf("电脑走:>\n");
    while(1)
    {
        x=rand()%d;//随机坐标的行;
        y=rand()%e;//随机坐标的列;
        if(board[x][y]==' ')
        {board[x][y]='#';
         break;}
    }
}

//返回1表示棋盘满了;
int full(char board[R][C],int m,int n)
{
    int x,y;
    for(x=0;x<m;x++)
    {
       for(y=0;y<n;y++)
        {if(board[x][y]==' ')
           {return 0;}//没有满

        }
    }
    return 1;//满了
}


//判断输赢的情况,'*'代表玩家赢了,'#'代表电脑赢了,'P'代表平局,'G'表示继续游戏;
char win(char board[R][C],int f,int i)
{
    int j=0;
    int k=0;
    //行有三个一样的棋子
    for(j=0;j<f;j++)
        {if(board[j][0]==board[j][1] && board[j][1]==board[j][2] && board[j][1] !=' ')
           {    return board[j][0];}
        }
    //列有三个一样的棋子
    for(k=0;k<i;k++)
    {
       if(board[0][k]=board[1][k] && board[1][k]==board[2][k] && board[1][k]!=' ')
           {return board[0][k];}
    }
    //两个对角线
    if(board[0][0]==board[1][1] && board[1][1]==board[2][2] && board [1][1] !=' ')
    {return board[1][1];}
    if(board[2][0]==board[1][1] && board[1][1]==board[0][2] && board[1][1] != ' ')
    {return board[1][1];}
    //判断是否平局
    if(full(board,R,C)==1)
    {    return 'P';}
    return 'G';
}


//显示游戏菜单界面
void mune()
{
  printf("*************************\n");
  printf("****** 1.play 0.exit*****\n");
  printf("*************************\n");
}
void game()

    char ret=0;
    char board[R][C]={0};//数组存放走出的棋盘信息,然后初始赋值为0;
    Initboard( board, R , C);//初始化棋盘;
    dayinboard( board,R ,C);//打印棋盘;
    while(1)//下棋
    {
    //玩家下棋
    playmove(board,R ,C);
    dayinboard(board,R ,C);//打印棋盘;
    ret= win(board,R,C);//判断玩家是否赢
    if(ret !='G')
    {
       break;
    }
    //电脑下棋
    computermove(board,R,C);//传行和列,生成随机数下表时控制它的范围
    dayinboard(board,R ,C);//打印棋盘;
    ret=win(board,R,C);//判断电脑是否赢
    if(ret !='G')
      {
       break;
      }
    }
    if(ret=='*')
    {printf("玩家赢\n");}
    else if(ret=='#')
    {printf("电脑赢\n");}
    else
        {printf("平局\n");}
}

void xuanze()//游戏选择
{
    int input=0;
    srand((unsigned int) time (NULL));//time函数的参数给空指针,然后将返回类型强制转换成整型;
    do
   { 
       mune();
       printf("请选择: >");
       scanf("%d",&input);
       switch(input)
       {
       case 1:
           {printf("请开始游戏\n");
           game();
           break;}
       case 0:
           {printf("退出游戏\n");
           break;}
       default:
           {printf("选择错误,请重新选择\n");
           break;}
       }
   }
   while(input);
}

//主函数以上都是函数调用;
int main()
{
    xuanze();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 很高兴为您服务,学习C语言需要有一定的编程基础,首先要掌握一些基本的编程知识,比如变量、函数、循环等,然后再学习C语言的语法,比如数据类型、控制结构、运算符等,最后学习一些C语言的应用,比如指针、结构体等。另外,也可以通过实践,多练习一些C语言的程序,以加深对C语言的理解。 ### 回答2: 当然可以教你学习C语言。首先,了解C语言的基础知识非常重要。你可以找一本入门的C语言教程,或者在网上寻找一些相关的学习资源。这些资源通常包含了C语言的基本语法、数据类型、运算符和控制结构等内容。通过阅读和理解这些基础知识,你可以对C语言有一个初步的了解。 其次,实践是学习C语言的关键。只有通过实际编写代码,你才能真正掌握C语言的技巧和应用。尝试使用一些简单的编程练习,比如编写一个计算器、打印九九乘法表等,这样可以帮助你巩固所学的知识,并逐渐提升编程能力。 另外,参与到一些C语言的社区或者论坛中,与其他学习者交流和讨论,可以加快你的学习进度。在这些社区中,你可以了解到学习C语言的一些技巧和经验分享,也可以向别人请教疑惑和困惑的地方。这样的互动可以帮助你更好地理解和应用C语言。 最后,保持耐心和坚持是学习C语言必不可少的要素。学习一门编程语言是一个长期的过程,不要期望能够一蹴而就。沉下心来,不断学习和实践,你会逐渐掌握C语言的技能,并能够用它来解决实际的问题。 总之,要学好C语言,理解基础知识,进行实践,参与互动,保持耐心和坚持是非常重要的。希望你能够通过不断努力,顺利掌握C语言! ### 回答3: 当然可以!学习C语言的方法有很多种,以下是一些建议: 1. 学习理论知识:先了解C语言的基本概念和语法规则,可以通过参考书籍、在线教程或者学习网站来学习。建议选择结构化的学习材料,有助于系统地掌握知识。 2. 实践编程:阅读理论知识只是第一步,最重要的是通过实践来加深对C语言的理解。尝试编写一些简单的程序,掌握基本的语法和逻辑。 3. 解决问题:遇到问题不必气馁,多尝试和思考,查找相关的资料和案例来解决。加入C语言学习的社群或者论坛,与他人交流和讨论,也是一个很好的互动和学习机会。 4. 刻意练习:用"C语言练习题"或者"C语言编程挑战"之类的关键词搜索相关练习题目,频繁练习能够提高编程技能。可以尝试更复杂的项目,不断挑战自己,在实践中提升对C语言的理解。 5. 阅读优秀代码:阅读其他人编写的高质量代码能够帮助我们学习更好地使用C语言。可以阅读一些开源项目或者参与开源社区,学习他人的编码风格和技巧。 6. 坚持和总结:学习语言需要耐心和时间。建议制定一个学习计划,每天保持一定的学习时间,并定期总结自己的学习成果和问题。 不管是哪种学习方法,自己的实践和经验是最重要的。顺利学习C语言需要一定的时间和坚持,但是只要你愿意去努力,相信你一定会掌握好这门语言。祝你学习愉快!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fighting787

一起加油,一起成功!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值