end 031
This commit is contained in:
parent
8d6b17b617
commit
20b82beed0
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,3 +1,4 @@
|
||||
tst/
|
||||
obj/
|
||||
bin/
|
||||
*.sln
|
||||
|
@ -49,7 +49,7 @@ skills; there’s 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.
|
||||
|
10
031_Challenge_mini_game/Project_minigame/Own/Own.csproj
Normal file
10
031_Challenge_mini_game/Project_minigame/Own/Own.csproj
Normal 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>
|
141
031_Challenge_mini_game/Project_minigame/Own/Program.cs
Normal file
141
031_Challenge_mini_game/Project_minigame/Own/Program.cs
Normal 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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user