This commit is contained in:
ipvg 2024-08-15 21:54:33 -04:00
parent 8d6b17b617
commit 20b82beed0
5 changed files with 171 additions and 8 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
tst/
obj/
bin/
*.sln

View File

@ -49,7 +49,7 @@ skills; theres little guidance and no step-by-step instructions.
In this module, you'll demonstrate your ability to:
- Use Visual Studio Code to develop a C# console application that uses methods
- Develop a C# console application that uses methods
to implement logical workflows.
- Understand existing code and make informed changes to design.
- Create return values and methods with required and optional parameters.
@ -58,10 +58,10 @@ to implement logical workflows.
## Prepare for challenge
You'll be using Visual Studio Code to develop a small mini-game. Your
application should establish the basics of the game, including updating player
state, manipulating player movement, and consuming and regenerating a food
object. You'll develop each of those features and run a simplified game test.
You'll be developing a small mini-game. Your application should establish the
basics of the game, including updating player state, manipulating player
movement, and consuming and regenerating a food object. You'll develop each of
those features and run a simplified game test.
### Project specification
@ -293,5 +293,18 @@ Verify that movement is normal when the player appearance is `(^-^)`.
Congratulations if you succeeded in this challenge!
- [Program.cs](./Project_minigame/Own/Program.cs)
---
### Summary
Your goal was to demonstrate the ability to develop features of an application
that achieve a design specification. You needed to decipher existing game code
to make informed decisions to make modifications and additions to the code.
By creating new methods, adding optional parameters, and using existing code,
you built a functional and fun mini-game!
Your ability to implement features of this mini-game application based on a
design specification demonstrates your ability to create and call methods.

View File

@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,141 @@
Console.CursorVisible = false;
Random random = new Random();
bool keep_playing = true;
int term_x = Console.WindowWidth - 5;
int term_y = Console.WindowHeight - 1;
int player_x = 0;
int player_y = 0;
int speed = 1;
int[] food_pos = { 0, 0 };
string[] states = { "('-')", "(^-^)", "(X_x)" };
string[] foods = { "@@@@@", "$$$$$", "*****" };
string curr_status = states[0];
string curr_food = foods[0];
void print(string msg, bool new_line = true) {
if (new_line) {
Console.WriteLine(msg);
} else {
Console.Write(msg);
}
}
void print_player(int pos_x, int pos_y, string status) {
Console.SetCursorPosition(player_x, player_y);
print(status, false);
}
start_game();
void start_game() {
Console.Clear();
print(curr_status, false);
Console.SetCursorPosition(0, 0);
show_food();
while (keep_playing) {
move();
check_food();
}
Console.Clear();
Console.CursorVisible = true;
}
void check_food() {
if (player_x == food_pos[0] && player_y == food_pos[1]) {
change_player();
show_food();
}
}
void check_near() {
//char at_x_pos =
// bool check_x = player_x-1 != " " && player_x+5 != " ";
// if (){
// }
}
// Returns true if the Terminal was resized
bool terminal_resized() {
return term_y != Console.WindowHeight - 1 ||
term_x != Console.WindowWidth - 5;
}
// Displays random food at a random location
void show_food() {
// Update food to a random index
curr_food = foods[random.Next(0, foods.Length)];
// Update food position to a random location
food_pos[0] = random.Next(0, term_x - curr_status.Length);
food_pos[1] = random.Next(0, term_y - 1);
// Display the food at the location
Console.SetCursorPosition(food_pos[0], food_pos[1]);
Console.Write(curr_food);
}
// Changes the player to match the food consumed
void change_player() {
int status_indx = Array.IndexOf(foods, curr_food);
curr_status = states[status_indx];
print_player(player_x, player_y, curr_status);
switch (status_indx) {
case 1:
speed += 1;
break;
case 2:
speed = (speed > 1) ? speed - 1 : 1;
freeze_ms(1000);
break;
}
}
// Temporarily stops the player from moving
void freeze_ms(int millis) {
System.Threading.Thread.Sleep(millis);
curr_status = states[0];
}
// Reads directional input from the Console and moves the player
void move() {
int last_x = player_x;
int last_y = player_y;
switch (Console.ReadKey(true).Key) {
case ConsoleKey.K:
player_y--;
break;
case ConsoleKey.J:
player_y++;
break;
case ConsoleKey.H:
player_x -= speed;
break;
case ConsoleKey.L:
player_x += speed;
break;
case ConsoleKey.Escape:
keep_playing = false;
break;
default:
keep_playing = false;
break;
}
// Clear the characters at the previous position
Console.SetCursorPosition(last_x, last_y);
for (int i = 0; i < curr_status.Length; i++) {
print(" ", false);
}
// Keep player position within the bounds of the Terminal window
player_x = (player_x < 0) ? 0 : (player_x >= term_x ? term_x : player_x);
player_y = (player_y < 0) ? 0 : (player_y >= term_y ? term_y : player_y);
Console.SetCursorPosition(player_x, player_y);
print(curr_status, false);
if (terminal_resized()) {
keep_playing = false;
print("Console was resized. Program exiting.");
freeze_ms(2000);
return;
}
}

View File

@ -1,6 +1,4 @@
using System;
Random random = new Random();
Random random = new Random();
Console.CursorVisible = false;
int height = Console.WindowHeight - 1;
int width = Console.WindowWidth - 5;