• github下载下来的C#控制台小游戏[含源码]


    早就听说了github是世界最大的源码库,但自己却不是很懂,今天去研究了下,注册了一个帐号,然后在上面搜索了一下C# game,然后发现有许多的游戏.

    随意地选择了一个,感觉比较简单,于是就下载了下来。这个解决方案包含了5个项目,每个项目都是一个小的控制台游戏。

    我打开运行了了下,有2个项目报错,但是汽车和乒乓可以运行。

    看了下代码,感觉还不错,有许多值得学习的地方。

    这个代码库是一个美国人提供的,瞬间感觉自己也变得洋气了起来!

    每个项目都只有一个文件,真是够简单。

    贴出乒乓的代码看看

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace PingPong
    {
        class Program
        {
            static int firstPlayerPadSize = 10;
            static int secondPlayerPadSize = 4;
            static int ballPositionX = 0;
            static int ballPositionY = 0;
            static bool ballDirectionUp = true; // Determines if the ball direction is up
            static bool ballDirectionRight = false;
            static int firstPlayerPosition = 0;
            static int secondPlayerPosition = 0;
            static int firstPlayerResult = 0;
            static int secondPlayerResult = 0;
            static Random randomGenerator = new Random();
    
            static void RemoveScrollBars()
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.BufferHeight = Console.WindowHeight;
                Console.BufferWidth = Console.WindowWidth;
            }
    
            static void DrawFirstPlayer()
            {
                for (int y = firstPlayerPosition; y < firstPlayerPosition + firstPlayerPadSize; y++)
                {
                    PrintAtPosition(0, y, '|');
                    PrintAtPosition(1, y, '|');
                }
            }
    
            static void PrintAtPosition(int x, int y, char symbol)
            {
                Console.SetCursorPosition(x, y);
                Console.Write(symbol);
            }
    
            static void DrawSecondPlayer()
            {
                for (int y = secondPlayerPosition; y < secondPlayerPosition + secondPlayerPadSize; y++)
                {
                    PrintAtPosition(Console.WindowWidth - 1, y, '|');
                    PrintAtPosition(Console.WindowWidth - 2, y, '|');
                }
            }
    
            static void SetInitialPositions()
            {
                firstPlayerPosition = Console.WindowHeight / 2 - firstPlayerPadSize / 2;
                secondPlayerPosition = Console.WindowHeight / 2 - secondPlayerPadSize / 2;
                SetBallAtTheMiddleOfTheGameField();
            }
    
            static void SetBallAtTheMiddleOfTheGameField()
            {
                ballPositionX = Console.WindowWidth / 2;
                ballPositionY = Console.WindowHeight / 2;
            }
    
            static void DrawBall()
            {
                PrintAtPosition(ballPositionX, ballPositionY, '@');
            }
    
            static void PrintResult()
            {
                Console.SetCursorPosition(Console.WindowWidth / 2 - 1, 0);
                Console.Write("{0}-{1}", firstPlayerResult, secondPlayerResult);
            }
    
            static void MoveFirstPlayerDown()
            {
                if (firstPlayerPosition < Console.WindowHeight - firstPlayerPadSize)
                {
                    firstPlayerPosition++;
                }
            }
    
            static void MoveFirstPlayerUp()
            {
                if (firstPlayerPosition > 0)
                {
                    firstPlayerPosition--;
                }
            }
    
            static void MoveSecondPlayerDown()
            {
                if (secondPlayerPosition < Console.WindowHeight - secondPlayerPadSize)
                {
                    secondPlayerPosition++;
                }
            }
    
            static void MoveSecondPlayerUp()
            {
                if (secondPlayerPosition > 0)
                {
                    secondPlayerPosition--;
                }
            }
    
            static void SecondPlayerAIMove()
            {
                int randomNumber = randomGenerator.Next(1, 101);
                //if (randomNumber == 0)
                //{
                //    MoveSecondPlayerUp();
                //}
                //if (randomNumber == 1)
                //{
                //    MoveSecondPlayerDown();
                //}
                if (randomNumber <= 70)
                {
                    if (ballDirectionUp == true)
                    {
                        MoveSecondPlayerUp();
                    }
                    else
                    {
                        MoveSecondPlayerDown();
                    }
                }
            }
    
            private static void MoveBall()
            {
                if (ballPositionY == 0)
                {
                    ballDirectionUp = false;
                }
                if (ballPositionY == Console.WindowHeight - 1)
                {
                    ballDirectionUp = true;
                }
                if (ballPositionX == Console.WindowWidth - 1)
                {
                    SetBallAtTheMiddleOfTheGameField();
                    ballDirectionRight = false;
                    ballDirectionUp = true;
                    firstPlayerResult++;
                    Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                    Console.WriteLine("First player wins!");
                    Console.ReadKey();
                }
                if (ballPositionX == 0)
                {
                    SetBallAtTheMiddleOfTheGameField();
                    ballDirectionRight = true;
                    ballDirectionUp = true;
                    secondPlayerResult++;
                    Console.SetCursorPosition(Console.WindowWidth / 2, Console.WindowHeight / 2);
                    Console.WriteLine("Second player wins!");
                    Console.ReadKey();
                }
    
                if (ballPositionX < 3)
                {
                    if (ballPositionY >= firstPlayerPosition
                        && ballPositionY < firstPlayerPosition + firstPlayerPadSize)
                    {
                        ballDirectionRight = true;
                    }
                }
    
                if (ballPositionX >= Console.WindowWidth - 3 - 1)
                {
                    if (ballPositionY >= secondPlayerPosition
                        && ballPositionY < secondPlayerPosition + secondPlayerPadSize)
                    {
                        ballDirectionRight = false;
                    }
                }
    
                if (ballDirectionUp)
                {
                    ballPositionY--;
                }
                else
                {
                    ballPositionY++;
                }
    
    
                if (ballDirectionRight)
                {
                    ballPositionX++;
                }
                else
                {
                    ballPositionX--;
                }
            }
    
            static void Main(string[] args)
            {
                RemoveScrollBars();
                SetInitialPositions();
                while (true)
                {
                    if (Console.KeyAvailable)
                    {
                        ConsoleKeyInfo keyInfo = Console.ReadKey();
                        if (keyInfo.Key == ConsoleKey.UpArrow)
                        {
                            MoveFirstPlayerUp();
                        }
                        if (keyInfo.Key == ConsoleKey.DownArrow)
                        {
                            MoveFirstPlayerDown();
                        }
                    }
                    SecondPlayerAIMove();
                    MoveBall();
                    Console.Clear();
                    DrawFirstPlayer();
                    DrawSecondPlayer();
                    DrawBall();
                    PrintResult();
                    Thread.Sleep(60);
                }
            }
        }
    }
    /*
    |____________________________________ |
    |                1-0                  |
    |                                     |
    |                                     |
    ||         *                         *|
    ||                                   *|
    ||                                   *|
    ||                                   *|
    |                                     |
    |                                     |
    |                                     |
    |                                     |
    |                                     |
    |_____________________________________|_
    */

    新手和学习者值得看的代码!点击下载

  • 相关阅读:
    你了解RTOS吗?
    [转] git rebase 详解
    MinGW vs MinGW-W64及其它
    【转】Video Rendering with 8-Bit YUV Formats
    Ubuntu假死
    渐进增强和优雅降级的区别
    JavaScript 插件的学习
    菜单的制作
    生活
    小组学习情况
  • 原文地址:https://www.cnblogs.com/flyant/p/4289559.html
Copyright © 2020-2023  润新知