鱼C论坛

 找回密码
 立即注册
查看: 1722|回复: 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
#include <stdio.h>
#include <windows.h>

#define MAP_WIDTH 6

#define MAP_SPACE 0
#define MAP_STONE 1

static void GotoXY(unsigned int x, unsigned int y)
{
        COORD coord = {x * 2, y};        // unicode
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

static void HideCursor()
{
        CONSOLE_CURSOR_INFO cci;
        cci.bVisible = FALSE;
        cci.dwSize = sizeof(cci);
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorInfo(handle, &cci);
}

void MapInit(unsigned char map[MAP_WIDTH][MAP_WIDTH])
{
        for(int h = 0; h < MAP_WIDTH; ++h)
        {
                for(int w = 0; w < MAP_WIDTH; ++w)
                {
                        map[h][w] = MAP_SPACE;
                }
        }
}

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

        map[y][x] = MAP_STONE;
}

void MapPrint(unsigned char map[MAP_WIDTH][MAP_WIDTH])
{
        for(int h = 0; h < MAP_WIDTH; ++h)
        {
                for(int w = 0; w < MAP_WIDTH; ++w)
                {
                        GotoXY(w, h);
                        switch(map[h][w])
                        {
                        case MAP_SPACE:
                                puts("※");
                                break;
                        case MAP_STONE:
                                puts("●");
                                break;
                        }
                }
        }
}

int main(void)
{
        HideCursor();

        unsigned char map[MAP_WIDTH][MAP_WIDTH];
        MapInit(map);
        MapSetStone(map, 1, 1);
        MapSetStone(map, 2, 1);
        MapSetStone(map, 3, 5);
        MapSetStone(map, 3, 4);
        MapPrint(map);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-6 15:44:22 | 显示全部楼层
所以你的思路描述的很清晰了,但是你的代码中shitou()函数是要做什么用呢?
想知道小甲鱼最近在做啥?请访问 -> 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;
}
你要传入地图也可以,这样比较简单。抱歉哈,手机不方便上代码~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

石头的函数是为了在地图上放置石头啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

就是这里搞不懂 如何让地图共享 怎么去变全局变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不在任何{  }内的就是全局变量,照我给你的就行了
想知道小甲鱼最近在做啥?请访问 -> 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

#define M 6

int map[M][M];

void shitou(int x, int y)
{
        if(x < M && y < M)
                map[x][y] = 1;
}
void print(int arr[][M])
{
        for(int i = 0; i < M; i++){
                for(int j = 0; j < M; j++)
                        printf("%d ", arr[i][j]);
                printf("\n");}
        printf("\n");
}

int main()
{
        print(map);
        shitou(2,3);
        print(map);
        
        return 0;
}
c = shitou(3,2); ?什么作用?

点评

这个 (x,y) 是颠倒的,要的话在shitou函数修改就好  发表于 2018-10-6 19:26
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

shitou 23 用来设置石头的位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那我想把石头换成X是在 石头的函数里换还是在打印的函数里换?  然后x 要变成 char 不能是int吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你把它赋给一个变量是不会有任何作用的
嗯,char map[M][M];
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

#define MAP_WIDTH 6

#define MAP_SPACE 0
#define MAP_STONE 1

static void GotoXY(unsigned int x, unsigned int y)
{
        COORD coord = {x * 2, y};        // unicode
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

static void HideCursor()
{
        CONSOLE_CURSOR_INFO cci;
        cci.bVisible = FALSE;
        cci.dwSize = sizeof(cci);
        HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorInfo(handle, &cci);
}

void MapInit(unsigned char map[MAP_WIDTH][MAP_WIDTH])
{
        for(int h = 0; h < MAP_WIDTH; ++h)
        {
                for(int w = 0; w < MAP_WIDTH; ++w)
                {
                        map[h][w] = MAP_SPACE;
                }
        }
}

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

        map[y][x] = MAP_STONE;
}

void MapPrint(unsigned char map[MAP_WIDTH][MAP_WIDTH])
{
        for(int h = 0; h < MAP_WIDTH; ++h)
        {
                for(int w = 0; w < MAP_WIDTH; ++w)
                {
                        GotoXY(w, h);
                        switch(map[h][w])
                        {
                        case MAP_SPACE:
                                puts("※");
                                break;
                        case MAP_STONE:
                                puts("●");
                                break;
                        }
                }
        }
}

int main(void)
{
        HideCursor();

        unsigned char map[MAP_WIDTH][MAP_WIDTH];
        MapInit(map);
        MapSetStone(map, 1, 1);
        MapSetStone(map, 2, 1);
        MapSetStone(map, 3, 5);
        MapSetStone(map, 3, 4);
        MapPrint(map);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-6 20:35:09 | 显示全部楼层
1.png
想知道小甲鱼最近在做啥?请访问 -> 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");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

void print(char arr[][M])

那个是打印,修改的是另一个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不能在打印的函数里面改吗? 但我试着在石头的函数里改也不行啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你有没有看懂我和楼上大佬的代码呀?
修改是修改,打印是打印
你要修改+打印的话,在修改的函数里边套打印的函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

看得不是太懂  你的代码里哪个是修改的函数?石头那个?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

是的,按照你的思路写的,不能明白?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢大佬  我在本版发的另一个问题怎么解决呢? 读取文件的字符 判断是不是回文  我的编码出现了segmentation fault
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-2 16:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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