Bringen Sie Schritt für Schritt bei, wie Sie das Spiel „Maze Walking“ in C-Sprache schreiben (wenn Sie den Text verstehen, werden Sie die Serie selbst eingeben).

Inhaltsverzeichnis

Entwerfen Sie eine Labyrinthkarte

Design-Protagonist: Little Ball

Vollständiger Code


 

Dieses Mal werde ich Ihnen beibringen, wie man ein einfaches „Labyrinth-Walking“-Spiel schreibt. Wir können einen „kleinen Ball“ über die vier Tasten „W“, „S“, „A“ und „D“ auf der Tastatur auf und ab steuern Durch die Bewegung nach links und rechts soll dieser „kleine Ball“ vom Startpunkt aus aus dem Labyrinth herausgeholt werden.

9dbbef56f9fb4fdf9943a6f165f3d45a.gif

Entwerfen Sie eine Labyrinthkarte

Erstens können wir das Zeichen „#“ verwenden, um die Wand des Labyrinths darzustellen, und den Großbuchstaben „O“, um den Ball darzustellen

Wir können zunächst ein einfaches Labyrinth entwerfen und ein zweidimensionales Zeichenarray zum Speichern des Labyrinths verwenden.


char a[50][50] = { "######",
				   "#O #  ",
				   "# ## #",
				   "#  # #",
				   "##   #",
				   "######",
	             };

Nachdem das Labyrinth entworfen und gespeichert wurde, können wir eine for-Schleife verwenden, um das Labyrinth auf dem Bildschirm auszudrucken, wie im folgenden Code gezeigt:

for (i = 0;i <= 5;i++)
		puts(a[i]);

Die obige for-Schleife durchläuft insgesamt 6 Mal von 0 bis 5 und gibt nacheinander die Zeilen 0 bis 5 des Labyrinths aus. puts(a[i]) bedeutet, dass die Zeichenfolge jeder Zeile ausgegeben wird.

Design-Protagonist: Little Ball

Wir können die Variablen x und y verwenden, um die Anfangsposition der Kugel zu speichern, und die Variablen p und q, um den Endpunkt (Ausgang) des Labyrinths zu speichern.

Hinweis: Die Fäden beginnen bei 0 zu zählen. Achten Sie darauf, die Anfangsposition der Kugel und die Ausgangsposition des Labyrinths nicht falsch einzuschätzen.

Dann besteht der nächste Schritt darin, zu entwerfen, wie der Ball gesteuert werden soll. Hier können Sie die vier Tasten „w“, „s“, „a“ und „d“ auf der Tastatur verwenden, um die Bewegung des Balls zu steuern. Natürlich Sie können auch die Tasten drücken, die Sie zum Gestalten benötigen.

Wie kann man es erreichen? Wir hoffen, dass sich der Ball beim Drücken von „s“ einen Schritt nach unten bewegt, sodass wir „getch()“ verwenden können, um die Zeichen abzurufen (hier möchten wir die eingegebenen Zeichen nicht anzeigen, und wir hoffen, dass die eingegebenen Zeichen dies können). werden sofort vom Programm abgerufen, und es ist nicht nötig, nach der Eingabe eines Zeichens die „Enter“-Taste zu drücken. Warum getch verwendet wird, können Sie in meinen vorherigen Blogs die Einführung von „getche“ usw. lesen.)

ch = getch();//输入的字符串存储在变量ch中

Okay, wir haben die Eingabe von Zeichenfolgen implementiert. Wenn Sie als Nächstes auf das Zeichen s tippen, lassen Sie den Ball einen Schritt nach unten laufen.

if (ch == 's')
		{
			if (a[x + 1][y] != '#')
			{
				a[x][y] = ' ';
				x++;
				a[x][y] = 'O';
			}
		}

Hier ist eine Erklärung: Zuerst verwenden wir die if-Anweisung, um zu bestimmen, ob das von uns eingegebene Zeichen „s“ ist. Wenn es das Zeichen s ist, lassen wir den Ball nach unten wandern, aber bevor wir ihn nach unten bewegen lassen, müssen wir dies tun Sehen Sie, ob der nächste Schritt verschoben werden kann (d. h. ob es sich um „#“ handelt).

Verwenden Sie also die if-Anweisung, um festzustellen, ob der nächste Schritt „#“ ist (jemand hier fragt sich vielleicht, warum a[x+1][y] einen Schritt nach unten bedeutet? Erklärung: Bei der Abwärtsbewegung ist der Ball natürlich immer noch hier A Spalte, aber es befindet sich nicht in dieser Zeile, sondern in der nächsten Zeile. Wenn Sie also nach unten gehen, bleibt y unverändert und x plus 1)

Wenn Sie sich nach rechts bewegen, befindet sie sich offensichtlich immer noch in derselben Zeile, sodass x unverändert bleibt, aber die Kugel befindet sich jetzt nicht mehr in der Spalte, sondern in der Spalte rechts davon, sodass y um 1 addiert werden muss

Zusammenfassung der Richtung:

Eine Abwärtsbewegung bedeutet, dass y unverändert bleibt und x um 1 zunimmt

Eine Verschiebung nach oben bedeutet, dass y unverändert bleibt und x um 1 abnimmt.
Eine Verschiebung nach links bedeutet, dass sich x nicht ändert und y um 1 abnimmt.

Eine Verschiebung nach rechts bedeutet, dass x unverändert bleibt und y um 1 zunimmt

a[x][y] = ' ';
                x++;
                a[x][y] = 'O';

 Was die Bedeutung dieser drei Linien betrifft, bedeutet die Abwärtsbewegung des Balls, dass das „O“ an der ursprünglichen Position des Balls zu einem Leerzeichen und das nächste Quadrat zu einem „O“ wird.

Der erste Satz a[x][y]=''; besteht darin, die aktuelle Position des Balls in ein Leerzeichen zu ändern, x++; Dieser Satz ist sehr wichtig, er bedeutet, die Position des Balls zu ändern, da der Ball nur x++ benötigt nach unten bewegen Das war's, y bleibt unverändert. Das letzte a[x][y]='O'; dient dazu, den Inhalt der neuen Position des Balls durch den Ball 'O' zu ersetzen.

Da sich die Position des Balls geändert hat, muss der Zustand des neuen Labyrinths neu gedruckt werden. Denken Sie daran, den vorherigen Bildschirm vor dem Drucken zu löschen. Der Code lautet wie folgt:

system("cls");//这个是清理屏幕的,需要包含头文件<windows.h>

Da der obige Code jedoch nur einen Schritt bewegen kann, verwenden wir hier vorübergehend eine while(1)-Schleife, um das Problem zu lösen.

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
	char a[50][50] = { "######",
					   "#O #  ",
					   "# ## #",
					   "#  # #",
			 		   "##   #",
					   "######",
	                  };
	int i, x, y, p, q;//这里定义小球的初始位置和迷宫的终点位置
	char ch;

	x = 1;y = 1;p = 1;q = 5;
	for (i = 0;i <= 5;i++)
		puts(a[i]);
	while (1)
	{
		ch = getch();
		if (ch == 's')
		{
			if (a[x + 1][y] != '#')
			{
				a[x][y] = ' ';
				x++;
				a[x][y] = 'O';
			}
		}
		
		system("cls");
		for (i = 0;i <= 5;i++)
		{
			puts(a[i]);
		}
	}
	system("cls");
	Sleep(500);
	return 0;
}

Derzeit kann sich der Ball nur in eine Richtung bewegen. Als nächstes werden wir die Bewegung des Balls in die anderen drei Richtungen erkennen.

Das Bewegen in die anderen drei Richtungen ähnelt eigentlich dem „Abwärtsbewegen“. Achten Sie nur darauf, ob sich x oder y ändert, ob eins addiert oder eins subtrahiert wird.

while (x != p || y != q)//这里把1改为迷宫的出口位置
	{
		ch = getch();
		if (ch == 's')
		{
			if (a[x + 1][y] != '#')
			{
				a[x][y] = ' ';
				x++;
				a[x][y] = 'O';
			}
		}
		if (ch == 'w')
		{
			if (a[x - 1][y] != '#')
			{
				a[x][y] = ' ';
				x--;
				a[x][y] = 'O';
			}
		}
		if (ch == 'a')
		{
			if (a[x][y - 1] != '#')
			{
				a[x][y] = ' ';
				y--;
				a[x][y] = 'O';
			}
		}
		if (ch == 'd')
		{
			if (a[x][y + 1] != '#')
			{
				a[x][y] = ' ';
				y++;
				a[x][y] = 'O';
			}
		}

Schließlich können wir später am Ende des Spiels „Sie gewinnen“ ausdrucken.

Vollständiger Code

wie folgt:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
	char a[50][50] = { "######",
					   "#O #  ",
					   "# ## #",
					   "#  # #",
					   "##   #",
					   "######",
	                 };
	int i,x, y, p, q;
	char ch;

	x = 1;y = 1;p = 1;q = 5;
	for (i = 0;i <= 5;i++)
		puts(a[i]);
	while (x != p || y != q)
	{
		ch = getch();
		if (ch == 's')
		{
			if (a[x + 1][y] != '#')
			{
				a[x][y] = ' ';
				x++;
				a[x][y] = 'O';
			}
		}
		if (ch == 'w')
		{
			if (a[x - 1][y] != '#')
			{
				a[x][y] = ' ';
				x--;
				a[x][y] = 'O';
			}
		}
		if (ch == 'a')
		{
			if (a[x][y - 1] != '#')
			{
				a[x][y] = ' ';
				y--;
				a[x][y] = 'O';
			}
		}
		if (ch == 'd')
		{
			if (a[x][y + 1] != '#')
			{
				a[x][y] = ' ';
				y++;
				a[x][y] = 'O';
			}
		}
		system("cls");
		for (i = 0;i <= 5;i++)
		{
			puts(a[i]);
		}
	}
		system("cls");
		printf("you win!\n");
		Sleep(500);
	return 0;
}

Vielen Dank fürs Zuschauen. Nachdem Sie es gesehen haben, können Sie es ausprobieren und damit herumspielen. Natürlich können Sie auch eine komplexere Karte entwerfen und die Parameter einfach selbst ändern.

 

 

おすすめ

転載: blog.csdn.net/zsd2829568515/article/details/134477620