更新我的数组棋盘游戏



我正在创造一款游戏。它有一个5乘5的板充满了字符a,b和c。我需要创建一个函数,如果板检测到彼此相邻的相同字母,它就会消失,空的单元格被一组新的字母(a,b,c)所取代。有点像糖果粉碎游戏。我还需要显示游戏结束前的移动次数。这是我到目前为止的地方

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX 10
//creates board and fills in the letters randomly
int board()
{
    char grid[MAX][MAX];
    char letter[3] = {'a', 'b', 'c'};
    int i,j,row,col;
    printf("Please enter your grid size: ");
    scanf("%d %d", &row, &col);
    if(row < 10 && col < 10){
        for(i=0; i < MAX; i++){
            for(j=0; j < MAX; j++){
                grid[i][j] = letter[rand()%3];
            }
        }
        for(i=0; i < MAX; i++){
            for(j=0; j < MAX; j++){
                printf("%c ", grid[i][j]);
            }
            printf("n");
        }
    }
    else{
        printf("Board is too bign");
        board();
    }
    return 0;
}
//the count doesn't quite do what I need it to
int moveCount()
    {
    char s;
    printf("Press s to start: ");
    scanf("%c", &s);
    if(s == 's' || s == 'S'){
        int count;
        int max = 10;
        for(count=1; count < max; count++)
            if(count == max){
                -printf("No more moves can be made");
            }
            else{
                printf("Number of moves made: %dn", count);
            }
    }
    else{
        printf("That is not sn");
        moveCount();
    }
}
//Trying to check to make sure that n board is always atleast three cells
int inputCheck(){
    int n, m;
    if(n == 3 || n > 3 && m == 1 || m > 1){
        moveCount();
    }
}
int main()
{
    board();
    inputCheck();
}

实现检查相邻单元格是否相同并删除它们的函数的最佳方法是什么?我会想象这样做if(myArray[0][0] == 'a' &&myArray[0][1] == 'a'{做某事}…但我不知道这是不是最好的方法,也不知道该怎么循环。也如何正确地实现计数,显示移动作出?我意识到这段代码有很多缺陷,但我是很新的,所以请轻松。谢谢你的帮助和指引。

这里有一个严重的bug:

int n, m;
if(n == 3 || n > 3 && m == 1 || m > 1){

nm未初始化。

需要#include <stdlib.h>代替rand()

在回答您的实际问题时,这样做会起作用。这有点草率,但这是我的5分钟答案。我假设网格是实际的板,它目前只存在于您的board()函数中,所以我只是将其添加为参数。你必须让它适合你的实际游戏。

inline int clamp (int v, int min, int max) {
  return (v < min) ? min: (v > max) ? max: v;
}
void place (char ltr, int x, int y, char grid[MAX][MAX])
{
  grid[y][x] = ltr; // TODO: put bounds checking around x & y
  for (int i = clamp(y - 1, 0, MAX); i <= clamp (y + 1, 0, MAX); i++) {
    for (int j = clamp(x - 1, 0, MAX); j <= clamp(x + 1, 0, MAX); j++) {
      if (i != y || j != x && grid[i][j] == ltr) {
        grid[i][j] = '';  // TODO: replace null char with desired one.
      }
    }
  }
}

板函数设置得很好。正如前面的答案所说,如果您打算在不同的函数中检查值,参数是检查值的最佳方式,如果您希望在函数中检查它们,一个简单的if命令就可以做到。

我不会传递整个数组作为参数,而是使用指向特定单元格的指针。然后,当一个人选择一个单元格时,他们会得到一个内存地址,然后你可以将存储在该内存地址中的信息与他们正在比较的另一个内存地址中的信息进行比较。

快速指针课—"*"表示创建指针。例如,char *ch = array;将指向整个数组的内存地址。然后,通过更多的研究,您将能够进入二维阵列中的特定内存地址,例如您的电路板,查看该位置的内容,并将其与二维阵列中另一个内存地址中包含的内容进行比较。

你为什么要这么做?因为这不是Java,所以我们可以在C语言中进行内存管理,使用整个数组作为参数是一种简单的方法,但会消耗更多的内存。此外,指针是大多数编程语言中的基本元素,了解它们将使您成为更好的程序员。

旅途愉快! !

这也会更容易在你的棋盘上说,这个人在数组[3][2]中选择了这个地址,他们在那一点上只有四个内存地址可以选择。无论他们选择哪一种方式,内存地址都将在那里,您将能够以最小的系统使用量和快速响应进行比较。

最新更新