View difference between Paste ID: 4wbtPafY and U45Bv3TY
SHOW: | | - or go back to the newest paste.
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6
using System.Threading;
7
8
namespace FallingStones
9
{
10
    struct Object
11
    {
12
        public int row;
13
        public int col;
14
        public string str;
15
        public ConsoleColor color;     
16
    }
17
    class FallingRocks
18
    {
19
        static void PrintOnPosition(int col, int row, string objects, ConsoleColor color = ConsoleColor.Black)
20
        {
21
            Console.ForegroundColor = color;
22
            Console.SetCursorPosition(col, row);
23
            Console.Write(objects);
24
        }
25
        static void PrintCharOnPosition(int col, int row, char objects, ConsoleColor color = ConsoleColor.Black)
26
        {
27
            Console.ForegroundColor = color;
28
            Console.SetCursorPosition(col, row);
29
            Console.Write(objects);
30
        }
31
        static void Main()
32
        {
33
            Console.BufferHeight = Console.WindowHeight = 25;
34
            Console.BufferWidth = Console.WindowWidth = 60;
35
            Console.BackgroundColor = ConsoleColor.White;
36
            Console.ForegroundColor = ConsoleColor.Black;
37
38
            int playerField = 20;
39
            int livesCount = 2;
40
            int playerPoints = 0;
41
            int roundsCounter = 0;
42
            int threadSpeed = 150;
43
            
44
            Random randomNumbers = new Random();
45
            
46
            Object dwarf = new Object();
47
            dwarf.col = playerField / 2 - 1;
48
            dwarf.row = Console.WindowHeight - 1;
49
            dwarf.str = "(0)";
50
            dwarf.color = ConsoleColor.Black;
51
            PrintOnPosition(dwarf.col, dwarf.row, dwarf.str,dwarf.color);
52
            List<Object> objects = new List<Object>();
53
54
            string[] enemys = { "@", "*", "+", "-", "^", "&", "%", "!", "#", "$", ".", ";", "++", "--" };
55
            string[] colorNames = {"Black", "Cyan", "Green", "Magenta",  
56
                                    "DarkBlue", "DarkCyan", "DarkGreen", "DarkMagenta", "DarkRed", "DarkYellow"} ;
57
58
            //Console.BufferHeight = 300;
59
            //foreach (string color in colorNames)
60
            //{
61
            //    Console.WriteLine(color);    
62
            //}
63
            //Console.ReadLine();
64
            while (true)
65
            {
66
67
                // stoneGenerator = -1 = empty row  stoneGenerator = 0-3 = 1 to 4 stones per row
68
                int stoneGenerator = randomNumbers.Next(-1, 3);
69
                // random col
70
                int colGenerator = randomNumbers.Next(0, playerField);
71
                // Choosing random color . it is -1 beacuse last color in the array is white and the console is white so the item will not be seen
72
                string colorName = colorNames[randomNumbers.Next(colorNames.Length)];
73
                // chance to get life or enemys
74
                int chance = randomNumbers.Next(0, 100); 
75
                // if the row is not empty
76
                if (stoneGenerator != -1)                 
77
                {
78
                    // 3% chance to generate row with Life on it
79
                    if (chance < 4)
80
                    {
81
                        Object livePlus = new Object();
82
                        livePlus.col = colGenerator;
83
                        livePlus.row = 0;
84
                        livePlus.str = "L";
85
                        livePlus.color = ConsoleColor.Red;
86
                        objects.Add(livePlus);
87
                    }
88
                    else
89
                    {
90
                        for (int i = 0; i <= stoneGenerator; i++)
91
                        {
92
                            int enemysGenerator = randomNumbers.Next(enemys.Length);
93
                            Object enemyObjects = new Object();
94
                            enemyObjects.col = colGenerator;
95
                            enemyObjects.row = 0;
96
                            enemyObjects.str = enemys[enemysGenerator];
97
                            enemyObjects.color = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), colorName);
98
                            objects.Add(enemyObjects);
99
                        }
100
                    }
101
                }
102
                // moving the dwarf
103
                while (Console.KeyAvailable)
104
                {
105
                   
106
                    ConsoleKeyInfo pressedKey = Console.ReadKey(true);
107
                    if (pressedKey.Key == ConsoleKey.LeftArrow)
108
                    {
109
                        if (dwarf.col - 1 >= 0)
110
                        {
111
                            dwarf.col = dwarf.col - 1;
112
                            PrintOnPosition(dwarf.col, dwarf.row, dwarf.str, dwarf.color);
113
                            PrintOnPosition(dwarf.col + 3, dwarf.row, " ");
114
                        }
115
                    }
116
                    if (pressedKey.Key == ConsoleKey.RightArrow)
117
                    {
118
                        if (dwarf.col + 2 <= playerField)
119
                        {
120
                            dwarf.col = dwarf.col + 1;
121
                            PrintOnPosition(dwarf.col, dwarf.row, dwarf.str, dwarf.color);
122
                            PrintOnPosition(dwarf.col - 1, dwarf.row, " ");
123
                        }
124
                    }
125
                }
126
                                                       
127
                List<Object> newObjects = new List<Object>();
128
                for (int i = 0; i < objects.Count; i++ )
129
                {
130
                    Object oldObject = objects[i];
131
                    Object newObject = new Object();
132
                    newObject.col = oldObject.col;
133
                    newObject.row = oldObject.row + 1;
134
                    newObject.str = oldObject.str;
135
                    newObject.color = oldObject.color;
136
                    if (newObject.row == dwarf.row)  // Points
137
                    {
138
                        playerPoints += 10;
139
                    }
140
                    if (newObject.str == "L" && newObject.row == dwarf.row && (newObject.col >= dwarf.col && newObject.col <= dwarf.col + 2)) // lives++
141
                    {
142
                        livesCount++;
143
                        if (livesCount >= 5) livesCount = 5;                        
144
                    }
145
                    else if ((newObject.row == dwarf.row && (newObject.col >= dwarf.col && newObject.col <= dwarf.col + 2)) || // check colision with single character stones
146
                        ((newObject.str == "++" || newObject.str == "--") && (newObject.row == dwarf.row) &&                   // check colision with double character stones
147
                        (newObject.col + 1 >= dwarf.col && newObject.col + 1 <= dwarf.col + 2)))
148
                    {
149
                        playerPoints -= 1000;
150
                        if (playerPoints <= 0) playerPoints = 0;
151
                        objects.Clear();
152
                        livesCount--;
153
                        if (livesCount == 0)
154
                        {
155
                            PrintOnPosition(25, 15, "GAME OVER", ConsoleColor.Red);
156
                            PrintOnPosition(25, 10, "Lives :" + livesCount, ConsoleColor.Black);
157
                            Console.SetCursorPosition(25,16);
158
                            Console.ReadLine();
159
                            return;
160
                        }
161
                    }
162
                    if (newObject.row < Console.WindowHeight)
163
                    {
164
                        newObjects.Add(newObject);
165
                    }
166
                }
167
                Console.Clear();
168
                objects = newObjects;
169
170
                // print everything
171
                PrintOnPosition(dwarf.col, dwarf.row, dwarf.str, dwarf.color);
172
                foreach (Object obj in objects)
173
                {                   
174
                    PrintOnPosition(obj.col, obj.row, obj.str, obj.color);                                            
175
                }
176
177
                PrintOnPosition(25, 10, "Lives :" + livesCount, ConsoleColor.Black);
178
                PrintOnPosition(25, 11, "Points : " + playerPoints, ConsoleColor.Black);
179
                   // Press button to reset speed
180
181
                roundsCounter++;
182-
                if (roundsCounter == 500)
182+
                if (playerPoints % 1000 == 0)
183
                {
184
                    threadSpeed -= 5;        
185
                }
186
                Thread.Sleep(threadSpeed);
187
188
            }
189
        }
190
    }
191
}