2016-03-20 4 views
0

Wie könnte ich eine anstelle der Leerzeichen in meinen definiert in my.h anzeigen? Ich benutze Ncurses für die Schnittstelle, und um es anzuzeigen, anstatt die Zeichenfolgen in der .c-Datei zu setzen, habe ich ein .h erstellt und alle Zeichenfolgen für die Schnittstelle definiert. Könnten mir einige erklären, wie das geht?Zeige ein "int ** array" in C mit ncurses

Grundsätzlich in meiner .C-Datei, werde ich tun, nur "mvprintw (..., MAP_1)" Aber von Map_2 zu MAP_21, würde Ich mag Räume ersetzen durch einen int ** Array

Hier

ist my.h:

#ifndef MY_H_ 
# define MY_H_ 

# define HEADER_1 "  ______________________ _________\n" 
# define HEADER_2 "  /_ __/ ____/_ __/ __ \\/ _/ ___/\n" 
# define HEADER_3 " ///__/ ////_/ ///\\__ \\ \n" 
# define HEADER_4 " ////___///_, _///___//\n" 
# define HEADER_5 " /_/ /_____/ /_/ /_/ |_/___//____/ \n" 

# define MAP_1 "௦----------௦\n" 
# define MAP_2 "|   |\n" 
# define MAP_3 "|   |\n" 
# define MAP_4 "|   |\n" 
# define MAP_5 "|   |\n" 
# define MAP_6 "|   |\n" 
# define MAP_7 "|   |\n" 
# define MAP_8 "|   |\n" 
# define MAP_9 "|   |\n" 
# define MAP_10 "|   |\n" 
# define MAP_11 "|   |\n" 
# define MAP_12 "|   |\n" 
# define MAP_13 "|   |\n" 
# define MAP_14 "|   |\n" 
# define MAP_15 "|   |\n" 
# define MAP_16 "|   |\n" 
# define MAP_17 "|   |\n" 
# define MAP_18 "|   |\n" 
# define MAP_19 "|   |\n" 
# define MAP_20 "|   |\n" 
# define MAP_21 "|   |\n" 
# define MAP_22 "௦----------௦\n" 

#endif /* !MY_H_ */ 

Dank!

+1

Warum 'int **'? Vielleicht meintest du 'char **' – pmg

+0

@pmg Weil ich ein int ** für meine tetris verwende – iNukeLaPeste

+0

@iNukeLaPeste: bitte erkläre, warum du 'int ** array;' verwendest, indem du deine Frage bearbeitest. Es riecht nach einem Konstruktionsfehler. –

Antwort

0

Sie zeigen Strings mit ncurses an. Ein String ist ein Array von char (oder vielleicht eine Heap-allozierte Zone in einem Zeiger), die Null-Byte-terminiert ist.

So kopieren Sie eine Zeichenfolge wie MAP_13 in einen String-Puffer (strcpy oder strncpy verwenden) (vielleicht ein char linebuf [128];) und füllt diese Puffer entsprechend. Haben Sie eine Routine, die eine Tetris-Linie (etwas array[i]) in eine Schnur umwandelt.

Ich würde empfehlen (um Debuggen zu erleichtern, und um Null-Byte-Terminierung sicher zu sein), diesen Puffer (z. B. mit memset(linebuf, 0, sizeof(linebuf)); ....) vor der Kopie zu löschen.

BTW, für ein Tetris-Spiel, ich werde nicht mit einer Matrix aus int es, sondern eine Matrix aus unsigned char oder irgendeinen enum oder direkt von darstellbarenchar es

+0

Danke, aber warum sollte ich ein char ** anstelle eines int ** verwenden? Weil ein int ** für mich einfacher wäre. Das Array enthält Leerzeichen und * (das sind meine Tetris-Stücke - 4 * für ein Quadrat, usw.) und ich muss diese * abhängig davon, welches Stück es ist, färben. – iNukeLaPeste

+0

Was lässt Sie denken, dass die Verwendung von 'int' einfacher wäre? Was bedeutet dein Array? (Sie sollten die Frage bearbeiten, um sie zu verbessern) –

0

verwendet Sie können festlegen, ein Array von char Array wie folgt:

// each of the N elements of array can hold strings up to 19 characters 
char array[][20] = { 
    "one", 
    "two", 
    "...", 
    "forty two" 
}; 
0

Es gibt mehr als einen Aspekt zu berücksichtigen:

ein int* Array wäre nützlich, wenn OP für eine gegebene Anzahl von Räumen auf jeder Zeile beispielsweise

int myarray[] = { 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 }; 

for (n = 1; n <= 22; ++n) 
    printw("%*s\n", myarray[n], " "); 

Ein int** Array ähnlich sein würde (aber nicht diejenigen, die die Datendeklaration ...) drucken wollte Beispiel

for (n = 1; n <= 22; ++n) 
    printw("%*s\n", *myindirect[n], " "); 

und könnte auch nützlich sein.