鱼C论坛

 找回密码
 立即注册
查看: 2083|回复: 20

[已解决]矩阵游戏遇到的问题

[复制链接]
发表于 2018-10-6 15:38:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

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

x
先用一个矩阵做一个地图,然后再用一个函数设置地图上的石头,石头在地图里返回1 石头不能再地图外否则返回0; 但我不知道石头的函数应该怎样修改

#include<stdio.h>
#include<stdlib.h>
#include "tt.h"
#define M 6
int map(){
    int i,j;
    int tab[M][M]={};
    for (i=0;i<M;i++){
        for(j=0;j<M;j++){
            printf("%d ",tab[i][j]);
        }
        printf("\n");
    }
   return 0;
}


int shitou(int lig, int col){
    int i,j,tab[M][M]={};
    if(tab[i][j]!=map())
        return 0;
    else
     return 1;
}

int main(){
    int c;
    c=shitou(3,2);
    return 0;
}
最佳答案
2018-10-6 20:34:31
  1. #include <stdio.h>
  2. #include <windows.h>

  3. #define MAP_WIDTH 6

  4. #define MAP_SPACE 0
  5. #define MAP_STONE 1

  6. static void GotoXY(unsigned int x, unsigned int y)
  7. {
  8.         COORD coord = {x * 2, y};        // unicode
  9.         SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
  10. }

  11. static void HideCursor()
  12. {
  13.         CONSOLE_CURSOR_INFO cci;
  14.         cci.bVisible = FALSE;
  15.         cci.dwSize = sizeof(cci);
  16.         HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
  17.         SetConsoleCursorInfo(handle, &cci);
  18. }

  19. void MapInit(unsigned char map[MAP_WIDTH][MAP_WIDTH])
  20. {
  21.         for(int h = 0; h < MAP_WIDTH; ++h)
  22.         {
  23.                 for(int w = 0; w < MAP_WIDTH; ++w)
  24.                 {
  25.                         map[h][w] = MAP_SPACE;
  26.                 }
  27.         }
  28. }

  29. void MapSetStone(unsigned char map[MAP_WIDTH][MAP_WIDTH], unsigned int x, unsigned int y)
  30. {
  31.         if((x >= MAP_WIDTH) || (y >= MAP_WIDTH))
  32.                 return;

  33.         map[y][x] = MAP_STONE;
  34. }

  35. void MapPrint(unsigned char map[MAP_WIDTH][MAP_WIDTH])
  36. {
  37.         for(int h = 0; h < MAP_WIDTH; ++h)
  38.         {
  39.                 for(int w = 0; w < MAP_WIDTH; ++w)
  40.                 {
  41.                         GotoXY(w, h);
  42.                         switch(map[h][w])
  43.                         {
  44.                         case MAP_SPACE:
  45.                                 puts("※");
  46.                                 break;
  47.                         case MAP_STONE:
  48.                                 puts("●");
  49.                                 break;
  50.                         }
  51.                 }
  52.         }
  53. }

  54. int main(void)
  55. {
  56.         HideCursor();

  57.         unsigned char map[MAP_WIDTH][MAP_WIDTH];
  58.         MapInit(map);
  59.         MapSetStone(map, 1, 1);
  60.         MapSetStone(map, 2, 1);
  61.         MapSetStone(map, 3, 5);
  62.         MapSetStone(map, 3, 4);
  63.         MapPrint(map);

  64.         return 0;
  65. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-6 15:44:22 | 显示全部楼层
所以你的思路描述的很清晰了,但是你的代码中shitou()函数是要做什么用呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-6 16:10:54 From FishC Mobile | 显示全部楼层
怪,你的地图不是共享的,变成全局变量,然后用石头函数在地图上放置石头不就好了吗?
int map[M][M];
void rock(int x, int y){
if( x < M && y < M)
map[x][y] = 1;
}
你要传入地图也可以,这样比较简单。抱歉哈,手机不方便上代码~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-6 16:27:12 | 显示全部楼层
newu 发表于 2018-10-6 08:44
所以你的思路描述的很清晰了,但是你的代码中shitou()函数是要做什么用呢?

石头的函数是为了在地图上放置石头啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-6 16:28:13 | 显示全部楼层
claws0n 发表于 2018-10-6 09:10
怪,你的地图不是共享的,变成全局变量,然后用石头函数在地图上放置石头不就好了吗?
int map[M][M];
vo ...

就是这里搞不懂 如何让地图共享 怎么去变全局变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-6 18:05:32 From FishC Mobile | 显示全部楼层
qpwoeiruyt 发表于 2018-10-6 16:28
就是这里搞不懂 如何让地图共享 怎么去变全局变量

不在任何{  }内的就是全局变量,照我给你的就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-6 19:06:57 | 显示全部楼层
claws0n 发表于 2018-10-6 11:05
不在任何{  }内的就是全局变量,照我给你的就行了

这样吗?

#include<stdio.h>
#include<stdlib.h>
#include "tt.h"
#define M 6
int map(){
    int i,j;
    int tab[M][M]={};
    for (i=0;i<M;i++){
        for(j=0;j<M;j++){
            printf("%d ",tab[i][j]);
        }
        printf("\n");
    }
   return 0;
}

int map[M][M];
void shitou(int lig,int col){
   
    if(lig<M&&col<M)
        map[lig][col]=1;
    else
      map[lig][col]=0;
   
}

int main(){
    int c;
    c=shitou(3,2);
    return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-6 19:16:38 | 显示全部楼层
  1. #include <stdio.h>

  2. #define M 6

  3. int map[M][M];

  4. void shitou(int x, int y)
  5. {
  6.         if(x < M && y < M)
  7.                 map[x][y] = 1;
  8. }
  9. void print(int arr[][M])
  10. {
  11.         for(int i = 0; i < M; i++){
  12.                 for(int j = 0; j < M; j++)
  13.                         printf("%d ", arr[i][j]);
  14.                 printf("\n");}
  15.         printf("\n");
  16. }

  17. int main()
  18. {
  19.         print(map);
  20.         shitou(2,3);
  21.         print(map);
  22.        
  23.         return 0;
  24. }
复制代码
c = shitou(3,2); ?什么作用?

点评

这个 (x,y) 是颠倒的,要的话在shitou函数修改就好  发表于 2018-10-6 19:26
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-6 20:06:58 | 显示全部楼层
claws0n 发表于 2018-10-6 12:16
c = shitou(3,2); ?什么作用?

shitou 23 用来设置石头的位置
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-6 20:17:06 | 显示全部楼层
claws0n 发表于 2018-10-6 12:16
c = shitou(3,2); ?什么作用?

那我想把石头换成X是在 石头的函数里换还是在打印的函数里换?  然后x 要变成 char 不能是int吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-6 20:25:12 | 显示全部楼层
qpwoeiruyt 发表于 2018-10-6 20:06
shitou 23 用来设置石头的位置

你把它赋给一个变量是不会有任何作用的
嗯,char map[M][M];
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-6 20:34:31 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. #include <windows.h>

  3. #define MAP_WIDTH 6

  4. #define MAP_SPACE 0
  5. #define MAP_STONE 1

  6. static void GotoXY(unsigned int x, unsigned int y)
  7. {
  8.         COORD coord = {x * 2, y};        // unicode
  9.         SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
  10. }

  11. static void HideCursor()
  12. {
  13.         CONSOLE_CURSOR_INFO cci;
  14.         cci.bVisible = FALSE;
  15.         cci.dwSize = sizeof(cci);
  16.         HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
  17.         SetConsoleCursorInfo(handle, &cci);
  18. }

  19. void MapInit(unsigned char map[MAP_WIDTH][MAP_WIDTH])
  20. {
  21.         for(int h = 0; h < MAP_WIDTH; ++h)
  22.         {
  23.                 for(int w = 0; w < MAP_WIDTH; ++w)
  24.                 {
  25.                         map[h][w] = MAP_SPACE;
  26.                 }
  27.         }
  28. }

  29. void MapSetStone(unsigned char map[MAP_WIDTH][MAP_WIDTH], unsigned int x, unsigned int y)
  30. {
  31.         if((x >= MAP_WIDTH) || (y >= MAP_WIDTH))
  32.                 return;

  33.         map[y][x] = MAP_STONE;
  34. }

  35. void MapPrint(unsigned char map[MAP_WIDTH][MAP_WIDTH])
  36. {
  37.         for(int h = 0; h < MAP_WIDTH; ++h)
  38.         {
  39.                 for(int w = 0; w < MAP_WIDTH; ++w)
  40.                 {
  41.                         GotoXY(w, h);
  42.                         switch(map[h][w])
  43.                         {
  44.                         case MAP_SPACE:
  45.                                 puts("※");
  46.                                 break;
  47.                         case MAP_STONE:
  48.                                 puts("●");
  49.                                 break;
  50.                         }
  51.                 }
  52.         }
  53. }

  54. int main(void)
  55. {
  56.         HideCursor();

  57.         unsigned char map[MAP_WIDTH][MAP_WIDTH];
  58.         MapInit(map);
  59.         MapSetStone(map, 1, 1);
  60.         MapSetStone(map, 2, 1);
  61.         MapSetStone(map, 3, 5);
  62.         MapSetStone(map, 3, 4);
  63.         MapPrint(map);

  64.         return 0;
  65. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-6 20:35:09 | 显示全部楼层
1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-6 23:35:42 | 显示全部楼层
claws0n 发表于 2018-10-6 13:25
你把它赋给一个变量是不会有任何作用的
嗯,char map[M][M];

但是这样子变不了啊?

void print(char arr[][M])
{
    int i,j;
    for(i = 0; i < M; i++){
        for(j = 0; j < M; j++){
            if (arr[i][j]==8)
                arr[i][j]='X'
    printf("%d ", arr[i][j]);}  
        printf("\n");}
    printf("\n");
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-6 23:54:34 | 显示全部楼层
qpwoeiruyt 发表于 2018-10-6 23:35
但是这样子变不了啊?

void print(char arr[][M])

那个是打印,修改的是另一个函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-6 23:55:45 | 显示全部楼层
claws0n 发表于 2018-10-6 16:54
那个是打印,修改的是另一个函数

不能在打印的函数里面改吗? 但我试着在石头的函数里改也不行啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-6 23:59:17 | 显示全部楼层
qpwoeiruyt 发表于 2018-10-6 23:55
不能在打印的函数里面改吗? 但我试着在石头的函数里改也不行啊

你有没有看懂我和楼上大佬的代码呀?
修改是修改,打印是打印
你要修改+打印的话,在修改的函数里边套打印的函数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 00:58:35 | 显示全部楼层
claws0n 发表于 2018-10-6 16:59
你有没有看懂我和楼上大佬的代码呀?
修改是修改,打印是打印
你要修改+打印的话,在修改的 ...

看得不是太懂  你的代码里哪个是修改的函数?石头那个?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-7 01:02:02 | 显示全部楼层
qpwoeiruyt 发表于 2018-10-7 00:58
看得不是太懂  你的代码里哪个是修改的函数?石头那个?

是的,按照你的思路写的,不能明白?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-7 01:49:19 | 显示全部楼层
claws0n 发表于 2018-10-6 18:02
是的,按照你的思路写的,不能明白?

感谢大佬  我在本版发的另一个问题怎么解决呢? 读取文件的字符 判断是不是回文  我的编码出现了segmentation fault
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 11:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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