龙芯俱乐部开源技术社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 10392|回复: 7

先试试把那个五子棋的程序写到pmon里。

[复制链接]

25

主题

218

帖子

10万

积分

论坛元老

Rank: 8Rank: 8

积分
101717
发表于 2015-5-26 13:55:41 | 显示全部楼层 |阅读模式
本帖最后由 xieyug2012 于 2015-9-14 08:54 编辑

板子收到后,先试试把那个五子棋的程序写到pmon里,看看中不?











  1. //根据龙芯SoC实验教程整理。pmon下的一个五子棋小游戏,以供自娱自乐。
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. /#include <pmon.h>
  5. #define row 9 //棋盘大小,能动态改变
  6. //------------
  7. //基本结构和功能函数
  8. struct wzqPiece {
  9.         int pieceKind; // 1黑,0白,初始一1
  10.         int posX;
  11.         int posY;
  12. };
  13. typedef struct wzqPiece piece;
  14. static void onDraw(int[][row], int *); //输出画面,接口是:当前棋盘,当前下棋步数
  15. static void receive(piece*, int *);    //接收玩家下子,接口是:已下子的棋子数
  16. //组指针,当前下棋步数

  17. static int whoIsWinner(int[][row], piece *); //判断输赢,接口是:当前棋盘,已
  18. //下子的棋子数组指针

  19. //命令函数主体
  20. //static int playwzq(int ac, char ** av) {
  21. static int playwzq(int ac, char  av) {

  22.         piece pieceOnBoard[(row * row) + 1];      //下标从1开始
  23.         piece Lastpiece;      //当前在棋盘上的最后下的棋子信息
  24.         int board[row][row];      //当前棋盘
  25. ///===========================================page 35
  26.         int step = 0;      //下棋步数
  27.         int winner = -1;      //1为黑棋赢,0为白棋赢, -1为暂时没有赢家
  28.         int i, j; //循环变量                                                                 //初始化游戏
  29.         for (i = 0; i < row; i++)
  30.                 for (j = 0; j < row; j++)
  31.                         board[i][j] = -1;
  32.         for (i = 0; i < ((row * row) + 1); i++) {
  33.                 pieceOnBoard[i].pieceKind = -1;

  34.                 pieceOnBoard[i].posX = -1;
  35.                 pieceOnBoard[i].posY = -1;
  36.         }
  37.         Lastpiece.pieceKind = -1;
  38.         Lastpiece.posX = -1;
  39.         Lastpiece.posY = -1;
  40.         onDraw(board, &step);
  41.         step = 1;
  42. //初始化完毕
  43. //当有赢家或是棋盘已满时游戏结束
  44.         while (winner == -1 && step < ((row * row) + 1)) {
  45.                 receive(pieceOnBoard, &step), Lastpiece.posX = pieceOnBoard[step].posX;
  46.                 Lastpiece.posY = pieceOnBoard[step].posY, Lastpiece.pieceKind =
  47.                                 pieceOnBoard[step].pieceKind;
  48.                 board[Lastpiece.posX][Lastpiece.posY] = pieceOnBoard[step].pieceKind;
  49.                 onDraw(board, &step);
  50.                 winner = whoIsWinner(board, &Lastpiece);
  51.                 step++;
  52.         }
  53. //游戏结束给出结果
  54.         if (winner == 1)
  55.                 printf("winner is Black Player\n");
  56.         else if (winner == 0)
  57.                 printf("winner is White Player \n");
  58.         else
  59.                 printf("theDraw\n");
  60.         return 0;
  61. }
  62. /* ------------------
  63. 普通功能函数实现部分包括
  64. onDraw() :输出当前每部棋盘画面,与玩家交互
  65. receive〇:每次通过终端从玩家那里接收下个棋子位置信息,并将相关信息保存
  66. 到已下棋子数组中去. .
  67. whoIsWinner() :判断当前棋局是否有赢家.并返回判断结果*/

  68. static void onDraw(int drawBoard[][row], int * StepPtr) {
  69.         int i, j;
  70.         if ((*StepPtr) % 2 == 1)
  71.                 printf("\n下一步,白棋走\n");
  72.         else
  73.                 printf("\n下一步,黑棋走\n");
  74.         printf("");
  75.         //------------------------------------------------
  76.         for (i = 0; i < row; i++)
  77.                 printf("%d", i);
  78.         for (i = 0; i < row; i++) {
  79.                 printf("\n");
  80.                 printf("%d", i);
  81.                 for (j = 0; j < row; j++) {
  82.                         if (drawBoard[i][j] == 1)       //画黑棋
  83.                                 printf("@");
  84.                         else if (drawBoard[i][j] == 0)   //画白棋
  85.                                 printf("o");
  86.                         else
  87.                                 printf("+"); //画空格
  88.                 }
  89.         }
  90.         printf("\n");
  91.         return;
  92. }

  93. static void receive(piece * pieceArray, int*StepPtr) {
  94.         int CorrectPosIn = 0; //判断输入是否结東标志, 1 为合法输入结束输入
  95.         piece temp;
  96.         int i;
  97.         char c;
  98.         printf("请输入下子的横坐标和纵坐标,q退出\n");
  99.         while (CorrectPosIn == 0) {
  100.                 temp.posX = getchar();
  101.                 temp.posY = getchar();
  102.                 if (temp.posX == 'q' || temp.posY == 'q') {
  103.                         printf("end the wzq game bye:) \n");
  104.                         exit(0);
  105.                 }
  106.                 if (temp.posX >= '0' && temp.posX <= 9 && temp.posY >= '0'
  107.                                 && temp.posY <= 9) {
  108.                         temp.posX = atoi(&(temp.posX));
  109.                         temp.posY = atoi(&(temp.posY));
  110.                 } else {
  111.                         temp.posX = -1;
  112.                         temp.posY = -1;
  113.                         printf("enter 0-9 number. . . . . \n");
  114.                         continue;
  115.                         if (temp.posX
  116.                                         < 0|| temp.posX>=row|| temp.posY< 0|| temp.posY>=row) {
  117.                                 Printf("数值不正确,请重新输入. . . \n");
  118.                                 continue;
  119.                         }
  120.                         CorrectPosIn = 1;

  121.                         for (i = 0; i <= *StepPtr; i++)
  122.                                 if (pieceArray[i].posX == temp.posX
  123.                                                 && pieceArray[i].posY == temp.posY) {
  124.                                         CorrectPosIn = 0, Printf("这位置上已经有棋子了,请重新输入. . .\n");
  125. //scanf("%d%d″,&(temp. posX),&(temp. posY) );
  126.                                         break;
  127.                                 }
  128.                 }
  129.                 temp.pieceKind = (*StepPtr) % 2;

  130.                 pieceArray[(*StepPtr)] = temp;
  131.                 return;
  132.         }
  133. }
  134. static int whoIsWinner(int curBoard[][row], piece * LastpiecePtr) {
  135.         int x, y;
  136.         int count = 1;

  137. //检查行                                                                          .
  138.         y = LastpiecePtr->posY;
  139.         for (x = (LastpiecePtr->posX) - 1; x >= 0; x--) {
  140.                 if (curBoard[x][y] == LastpiecePtr->pieceKind)
  141.                         count++;
  142.                 else
  143.                         break;
  144.         }
  145.         for (x = (LastpiecePtr->posX) + 1; x < row; x++) {
  146.                 if (curBoard[x][y] == LastpiecePtr->pieceKind)
  147.                         count++;
  148.                 else
  149.                         break;
  150.         }
  151.         if (count == 5)
  152.                 return LastpiecePtr->pieceKind;
  153.         else if (count > 5)

  154. //=============================================page 40
  155.                 return ((LastpiecePtr->pieceKind) + 1) % 2;
  156.         count = 1;
  157. //检查列                     
复制代码




本帖子中包含更多资源

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

x

25

主题

218

帖子

10万

积分

论坛元老

Rank: 8Rank: 8

积分
101717
 楼主| 发表于 2015-5-28 13:17:52 | 显示全部楼层
从其他龙芯项目搬来的程序,也算吗? 不过至少是照着书一个一个字母敲出来的。

84

主题

465

帖子

44万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
440441
发表于 2015-5-26 23:18:45 | 显示全部楼层
好啊 ,提交程序的都有积分奖励,可以换礼品的。

25

主题

218

帖子

10万

积分

论坛元老

Rank: 8Rank: 8

积分
101717
 楼主| 发表于 2015-9-5 15:38:14 | 显示全部楼层
经过仔细阅读后发现,这件事情需要修改pmon源代码,然后进行pmon的编译,然后是.........还是请哪个高手弄吧。

48

主题

257

帖子

4920

积分

新手上路

Rank: 1

积分
4920
发表于 2015-9-6 16:56:46 | 显示全部楼层
不要轻易刷pmon。
开龙bsp中的pmon源码应该“不是”开龙的。源文件“\PMON\Targets\LS1X\conf\ls1c”中的参数“UART_BASE_ADDR”的值不是串口2的基地址“0xbfe48000”。
估计是广州龙芯1c开发板的pmon,广州龙芯1c开发板上的硬件配置和开龙1c的硬件配置不一样,pmon应该还需要改(不止串口)。
哪位有可用的开龙gzrom.bin和源码的话,请共享一下。

4

主题

8

帖子

673

积分

版主

Rank: 7Rank: 7Rank: 7

积分
673
发表于 2016-2-15 14:09:25 | 显示全部楼层
简单平安 发表于 2015-9-6 16:56
不要轻易刷pmon。
开龙bsp中的pmon源码应该“不是”开龙的。源文件“\PMON\Targets\LS1X\conf\ls1c”中的参 ...

刘工维护的版本是可以编译的,测试成功了。
自由职业嵌入式工程师(专业提供网络设备解决方案)
联系方式:18013582125,18114354589 (陆工)
个人博客:forgotfun.org

48

主题

257

帖子

4920

积分

新手上路

Rank: 1

积分
4920
发表于 2016-2-15 14:23:43 | 显示全部楼层
佐须之男 发表于 2016-2-15 14:09
刘工维护的版本是可以编译的,测试成功了。

OK

25

主题

218

帖子

10万

积分

论坛元老

Rank: 8Rank: 8

积分
101717
 楼主| 发表于 2020-10-11 08:46:51 | 显示全部楼层
  表示祝贺 。 真是高手啊。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|龙芯俱乐部开源技术社区

GMT+8, 2024-3-29 05:08 , Processed in 0.115029 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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