xieyug2012 发表于 2015-5-26 13:55:41

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

本帖最后由 xieyug2012 于 2015-9-14 08:54 编辑

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











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

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

//命令函数主体
//static int playwzq(int ac, char ** av) {
static int playwzq(int ac, charav) {

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

                pieceOnBoard.posX = -1;
                pieceOnBoard.posY = -1;
      }
      Lastpiece.pieceKind = -1;
      Lastpiece.posX = -1;
      Lastpiece.posY = -1;
      onDraw(board, &step);
      step = 1;
//初始化完毕
//当有赢家或是棋盘已满时游戏结束
      while (winner == -1 && step < ((row * row) + 1)) {
                receive(pieceOnBoard, &step), Lastpiece.posX = pieceOnBoard.posX;
                Lastpiece.posY = pieceOnBoard.posY, Lastpiece.pieceKind =
                              pieceOnBoard.pieceKind;
                board = pieceOnBoard.pieceKind;
                onDraw(board, &step);
                winner = whoIsWinner(board, &Lastpiece);
                step++;
      }
//游戏结束给出结果
      if (winner == 1)
                printf("winner is Black Player\n");
      else if (winner == 0)
                printf("winner is White Player \n");
      else
                printf("theDraw\n");
      return 0;
}
/* ------------------
普通功能函数实现部分包括
onDraw() :输出当前每部棋盘画面,与玩家交互
receive〇:每次通过终端从玩家那里接收下个棋子位置信息,并将相关信息保存
到已下棋子数组中去. .
whoIsWinner() :判断当前棋局是否有赢家.并返回判断结果*/

static void onDraw(int drawBoard[], int * StepPtr) {
      int i, j;
      if ((*StepPtr) % 2 == 1)
                printf("\n下一步,白棋走\n");
      else
                printf("\n下一步,黑棋走\n");
      printf("");
      //------------------------------------------------
      for (i = 0; i < row; i++)
                printf("%d", i);
      for (i = 0; i < row; i++) {
                printf("\n");
                printf("%d", i);
                for (j = 0; j < row; j++) {
                        if (drawBoard == 1)       //画黑棋
                              printf("@");
                        else if (drawBoard == 0)   //画白棋
                              printf("o");
                        else
                              printf("+"); //画空格
                }
      }
      printf("\n");
      return;
}

static void receive(piece * pieceArray, int*StepPtr) {
      int CorrectPosIn = 0; //判断输入是否结東标志, 1 为合法输入结束输入
      piece temp;
      int i;
      char c;
      printf("请输入下子的横坐标和纵坐标,q退出\n");
      while (CorrectPosIn == 0) {
                temp.posX = getchar();
                temp.posY = getchar();
                if (temp.posX == 'q' || temp.posY == 'q') {
                        printf("end the wzq game bye:) \n");
                        exit(0);
                }
                if (temp.posX >= '0' && temp.posX <= 9 && temp.posY >= '0'
                              && temp.posY <= 9) {
                        temp.posX = atoi(&(temp.posX));
                        temp.posY = atoi(&(temp.posY));
                } else {
                        temp.posX = -1;
                        temp.posY = -1;
                        printf("enter 0-9 number. . . . . \n");
                        continue;
                        if (temp.posX
                                        < 0|| temp.posX>=row|| temp.posY< 0|| temp.posY>=row) {
                              Printf("数值不正确,请重新输入. . . \n");
                              continue;
                        }
                        CorrectPosIn = 1;

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

                pieceArray[(*StepPtr)] = temp;
                return;
      }
}
static int whoIsWinner(int curBoard[], piece * LastpiecePtr) {
      int x, y;
      int count = 1;

//检查行                                                                        .
      y = LastpiecePtr->posY;
      for (x = (LastpiecePtr->posX) - 1; x >= 0; x--) {
                if (curBoard == LastpiecePtr->pieceKind)
                        count++;
                else
                        break;
      }
      for (x = (LastpiecePtr->posX) + 1; x < row; x++) {
                if (curBoard == LastpiecePtr->pieceKind)
                        count++;
                else
                        break;
      }
      if (count == 5)
                return LastpiecePtr->pieceKind;
      else if (count > 5)

//=============================================page 40
                return ((LastpiecePtr->pieceKind) + 1) % 2;
      count = 1;
//检查列                     



xieyug2012 发表于 2015-5-28 13:17:52

从其他龙芯项目搬来的程序,也算吗? 不过至少是照着书一个一个字母敲出来的。

sn2015ol 发表于 2015-5-26 23:18:45

好啊 ,提交程序的都有积分奖励,可以换礼品的。

xieyug2012 发表于 2015-9-5 15:38:14

经过仔细阅读后发现,这件事情需要修改pmon源代码,然后进行pmon的编译,然后是.........还是请哪个高手弄吧。

简单平安 发表于 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和源码的话,请共享一下。

佐须之男 发表于 2016-2-15 14:09:25

简单平安 发表于 2015-9-6 16:56
不要轻易刷pmon。
开龙bsp中的pmon源码应该“不是”开龙的。源文件“\PMON\Targets\LS1X\conf\ls1c”中的参 ...

刘工维护的版本是可以编译的,测试成功了。

简单平安 发表于 2016-2-15 14:23:43

佐须之男 发表于 2016-2-15 14:09
刘工维护的版本是可以编译的,测试成功了。

OK

xieyug2012 发表于 2020-10-11 08:46:51

:victory:表示祝贺 。 真是高手啊。
页: [1]
查看完整版本: 先试试把那个五子棋的程序写到pmon里。