zoukankan      html  css  js  c++  java
  • C# 控制台项目小游戏

     代码:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading;
      6 using System.Threading.Tasks;
      7 
      8 
      9 class Program
     10 {
     11     //方向
     12     static int left = 0;
     13     static int right = 1;
     14     static int up = 2;
     15     static int down = 3;
     16 
     17 
     18     static int firstPlayerScore = 0;
     19     static int firstPlayerDirection = right;
     20     static int firstPlayerColumn = 0; // column位置
     21     static int firstPlayerRow = 0; // row位置
     22 
     23 
     24     static int secondPlayerScore = 0;
     25     static int secondPlayerDirection = left;
     26     static int secondPlayerColumn = 240; // column位置
     27     static int secondPlayerRow = 5; // row位置
     28 
     29 
     30     static bool[,] isUsed;
     31 
     32     static void Main(string[] args)
     33     {
     34         //Program2.Main(args);
     35         MainTwoPlayers(args);
     36     }
     37     static void MainTwoPlayers(string[] args)
     38     {
     39         SetGameField();//设置窗口大小和玩家初始位置
     40         StartupScreen();//提示操作
     41 
     42         isUsed = new bool[Console.WindowWidth, Console.WindowHeight];
     43 
     44         Console.WriteLine("isUsed.GetValue(1):" + isUsed.GetValue(0,1));
     45         while (true)
     46         {
     47             //Console.WriteLine(Console.KeyAvailable); 
     48             if (Console.KeyAvailable)//按下一个键时为true,
     49             {
     50                 ConsoleKeyInfo keyInfo = Console.ReadKey(true);
     51                 
     52                 if (keyInfo.Key==ConsoleKey.Delete)
     53                 {
     54                     Console.ReadKey();//Delete键暂停
     55                 }
     56                 ChangePlayerDirection(keyInfo);//判断按键改变方向是否有效,向上的时候,向下操作失灵,向右时按向左或向右失灵
     57             }
     58 
     59 
     60             MovePlayers();//左右位置++或--
     61 
     62 
     63             bool firstPlayerLoses = DoesPlayerLose(firstPlayerRow, firstPlayerColumn);
     64             bool secondPlayerLoses = DoesPlayerLose(secondPlayerRow, secondPlayerColumn);
     65 
     66 
     67             if (firstPlayerLoses && secondPlayerLoses)
     68             {
     69                 firstPlayerScore++;
     70                 secondPlayerScore++;
     71                 Console.WriteLine();
     72                 Console.WriteLine("Game over");
     73                 Console.WriteLine("Draw game!!!");
     74                 Console.WriteLine("Current score: {0} - {1}", firstPlayerScore, secondPlayerScore);
     75                 ResetGame();
     76             }
     77             if (firstPlayerLoses)
     78             {
     79                 secondPlayerScore++;
     80                 Console.WriteLine();
     81                 Console.WriteLine("Game over");
     82                 Console.WriteLine("Second player wins!!!");
     83                 Console.WriteLine("Current score: {0} - {1}", firstPlayerScore, secondPlayerScore);
     84                 ResetGame();
     85             }
     86             if (secondPlayerLoses)
     87             {
     88                 firstPlayerScore++;
     89                 Console.WriteLine();
     90                 Console.WriteLine("Game over");
     91                 Console.WriteLine("First player wins!!!");
     92                 Console.WriteLine("Current score: {0} - {1}", firstPlayerScore, secondPlayerScore);
     93                 ResetGame();
     94             }
     95 
     96 
     97             isUsed[firstPlayerColumn, firstPlayerRow] = true;
     98             isUsed[secondPlayerColumn, secondPlayerRow] = true;
     99 
    100 
    101             WriteOnPosition(firstPlayerColumn, firstPlayerRow, '*', ConsoleColor.Green);
    102             WriteOnPosition(secondPlayerColumn, secondPlayerRow, '*', ConsoleColor.Cyan);
    103 
    104 
    105             Thread.Sleep(100);
    106         }
    107     }
    108 
    109 
    110     static void StartupScreen()
    111     {
    112         string heading = "A simple tron-like game";
    113         Console.CursorLeft = Console.BufferWidth / 2 - heading.Length / 2;
    114         Console.WriteLine(heading);
    115 
    116 
    117         Console.ForegroundColor = ConsoleColor.Yellow;
    118         Console.WriteLine("Player 1's controls:
    ");
    119         Console.WriteLine("W - Up");
    120         Console.WriteLine("A - Left");
    121         Console.WriteLine("S - Down");
    122         Console.WriteLine("D - Right");
    123 
    124         string longestString = "Player 2's controls:";
    125         int cursorLeft = Console.BufferWidth - longestString.Length;
    126 
    127         Console.CursorTop = 1;
    128         Console.ForegroundColor = ConsoleColor.Cyan;
    129         Console.CursorLeft = cursorLeft;
    130         Console.WriteLine("Player 2's controls:");
    131         Console.CursorLeft = cursorLeft;
    132         Console.WriteLine("Up Arrow - Up");
    133         Console.CursorLeft = cursorLeft;
    134         Console.WriteLine("Left Arrow - Left");
    135         Console.CursorLeft = cursorLeft;
    136         Console.WriteLine("Down Arrow - Down");
    137         Console.CursorLeft = cursorLeft;
    138         Console.WriteLine("Right Arrow - Right");
    139 
    140         Console.ReadKey();
    141         Console.Clear();
    142     }
    143     static void ResetGame()
    144     {
    145         isUsed = new bool[Console.WindowWidth, Console.WindowHeight];
    146         SetGameField();
    147         firstPlayerDirection = right;
    148         secondPlayerDirection = left;
    149         Console.WriteLine("Press any key to start again...");
    150         Console.ReadKey();
    151         Console.Clear();
    152         MovePlayers();
    153     }
    154 
    155 
    156     static bool DoesPlayerLose(int row, int col)
    157     {
    158         if (row < 0)
    159         {
    160             return true;
    161         }
    162         if (col < 0)
    163         {
    164             return true;
    165         }
    166         if (row >= Console.WindowHeight)
    167         {
    168             return true;
    169         }
    170         if (col >= Console.WindowWidth)
    171         {
    172             return true;
    173         }
    174 
    175 
    176         if (isUsed[col, row])
    177         {
    178             return true;
    179         }
    180 
    181 
    182         return false;
    183     }
    184 
    185 
    186     static void SetGameField()
    187     {
    188         Console.WindowHeight = 30;
    189         Console.BufferHeight = 30;
    190 
    191 
    192         Console.WindowWidth = 100;
    193         Console.BufferWidth = 100;
    194 
    195 
    196         /*
    197          * 
    198          * ->>>>            <<<<-
    199          * 
    200          */
    201         firstPlayerColumn = 0;
    202         firstPlayerRow = Console.WindowHeight / 2;
    203 
    204 
    205         secondPlayerColumn = Console.WindowWidth - 1;
    206         secondPlayerRow = Console.WindowHeight / 2;
    207     }
    208 
    209      // 摘要:
    210      //      根据方向字段移动位置
    211     static void MovePlayers()
    212     {
    213         if (firstPlayerDirection == right)
    214         {
    215             firstPlayerColumn++;
    216         }
    217         if (firstPlayerDirection == left)
    218         {
    219             firstPlayerColumn--;
    220         }
    221         if (firstPlayerDirection == up)
    222         {
    223             firstPlayerRow--;
    224         }
    225         if (firstPlayerDirection == down)
    226         {
    227             firstPlayerRow++;
    228         }
    229 
    230 
    231         if (secondPlayerDirection == right)
    232         {
    233             secondPlayerColumn++;
    234         }
    235         if (secondPlayerDirection == left)
    236         {
    237             secondPlayerColumn--;
    238         }
    239         if (secondPlayerDirection == up)
    240         {
    241             secondPlayerRow--;
    242         }
    243         if (secondPlayerDirection == down)
    244         {
    245             secondPlayerRow++;
    246         }
    247     }
    248 
    249     //画新的移动位置
    250     static void WriteOnPosition(int x, int y, char ch, ConsoleColor color)
    251     {
    252         Console.ForegroundColor = color;
    253         Console.SetCursorPosition(x, y);
    254         Console.Write(ch);
    255     }
    256 
    257     //改变玩家方向
    258     static void ChangePlayerDirection(ConsoleKeyInfo key)
    259     {
    260         if (key.Key == ConsoleKey.W && firstPlayerDirection != down)
    261         {
    262             firstPlayerDirection = up;
    263         }
    264         if (key.Key == ConsoleKey.A && firstPlayerDirection != right)
    265         {
    266             firstPlayerDirection = left;
    267         }
    268         if (key.Key == ConsoleKey.D && firstPlayerDirection != left)
    269         {
    270             firstPlayerDirection = right;
    271         }
    272         if (key.Key == ConsoleKey.S && firstPlayerDirection != up)
    273         {
    274             firstPlayerDirection = down;
    275         }
    276 
    277 
    278         if (key.Key == ConsoleKey.UpArrow && secondPlayerDirection != down)
    279         {
    280             secondPlayerDirection = up;
    281         }
    282         if (key.Key == ConsoleKey.LeftArrow && secondPlayerDirection != right)
    283         {
    284             secondPlayerDirection = left;
    285         }
    286         if (key.Key == ConsoleKey.RightArrow && secondPlayerDirection != left)
    287         {
    288             secondPlayerDirection = right;
    289         }
    290         if (key.Key == ConsoleKey.DownArrow && secondPlayerDirection != up)
    291         {
    292             secondPlayerDirection = down;
    293         }
    294     }
    295 }
    View Code

    源码,是痛苦的,又是快乐的,如果没有这痛苦,也就没有了这快乐!
  • 相关阅读:
    第二十二章 6未命名的命名空间 简单
    第二十二章 4使用关键字using 简单
    第二十三模板 3具体化函数模板 简单
    第二十二章 2创建命名空间 简单
    第二十三模板 7复杂类模板 简单
    第二十二章 3使用命名空间 简单
    第二十二章 1什么是命名空间 简单
    第二十三模板 2重载模板 简单
    第二十三模板 1什么是模板 简单
    测定事务引擎设计的基准
  • 原文地址:https://www.cnblogs.com/erlongxizhu-03/p/12574809.html
Copyright © 2011-2022 走看看