簡體   English   中英

更新我的棋盤游戲

[英]Updating my array board game

因此,我正在創建一個游戲。 它有一個5 x 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 big\n");
        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: %d\n", count);
            }
    }
    else{
        printf("That is not s\n");
        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'{做某事...)...但是我不知道那是不是最好方式或循環方式,以及如何正確實現顯示移動的計數?我意識到這段代碼有很多缺陷,但是我很新,所以請輕松一些。感謝您的幫助或推動正確的方向。

這里是一個嚴重的錯誤:

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] = '\0';  // TODO: replace null char with desired one.
      }
    }
  }
}

板功能設置很好。 如先前的回答所述,如果要在其他函數中檢查參數,則參數是檢查值的最佳方法;如果希望在函數中檢查參數,則使用簡單的if命令即可解決問題。

我不會將整個數組作為參數傳遞,而是會使用指向該特定單元格的指針。 然后,在一個人選擇一個單元時,會為他們提供一個內存地址,然后您可以將該內存地址中存儲的信息與他們正在比較的其他地址進行比較。

快速指針課程-*用於創建指針。 例如,char * ch = array; 將指向整個陣列的內存地址。 然后,通過更多的研究,您將可以定位到二維數組中的特定內存地址(例如您的電路板),查看該位置的內容並將其與二維內存中另一個內存地址中包含的內容進行比較陣列。

你為什么要這么做? 由於這不是Java,因此我們可以使用C進行內存管理,並且使用整個數組作為參數是一種簡單但更昂貴的內存方式。 另外,指針是大多數編程語言中的基本元素,對它們的充分了解將使您成為更好的程序員。

旅途愉快!!

同樣,這也將更容易通過您的董事會來說,這個人在array [3] [2]上選擇了這個地址,那時候他們只有四個內存地址可供選擇。 無論選擇哪種方式,內存地址都將存在,您將能夠以最小的系統使用率和快速的響應進行比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM