View difference between Paste ID: LFfZ4m0j and xYkAQSTw
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
7
namespace Digger
8
{
9
	public class Terrain : ICreature
10
	{
11
		public CreatureCommand Act(int x, int y)
12
		{
13
			return new CreatureCommand() { DeltaX = 0, DeltaY = 0 };
14
		}
15
16
		public bool DeadInConflict(ICreature conflictedObject)
17
		{
18
			return true;
19
		}
20
21
		public int GetDrawingPriority()
22
		{
23
			return 2;
24
		}
25
26
		public string GetImageFileName()
27
		{
28
			return "Terrain.png";
29
		}
30
	}
31
32
	public class Player : ICreature
33
	{
34
		public static int X, Y = 0;
35
		public static int LetX, LetY = 0;
36
		public CreatureCommand Act(int x, int y)
37
		{
38
			X = x;
39
			Y = y;
40
			switch (Game.KeyPressed)
41
			{
42
				case System.Windows.Forms.Keys.Left:
43
				LetY = 0;
44
				LetX = -1;
45
				break;
46
47
				case System.Windows.Forms.Keys.Up:
48
				LetY = -1;
49
				LetX = 0;
50
				break;
51
52
				case System.Windows.Forms.Keys.Right:
53
				LetY = 0;
54
				LetX = 1;
55
				break;
56
57
				case System.Windows.Forms.Keys.Down:
58
				LetY = 1;
59
				LetX = 0;
60
				break;
61
62
				default:
63
				Stay();
64
				break;
65
			}
66
			if (!(x + LetX >= 0 && x + LetX < Game.MapWidth &&
67
			y + LetY >= 0 && y + LetY < Game.MapHeight))
68
				Stay();
69
			if (Game.Map[x + LetX, y + LetY] != null)
70
			{
71
				if (Game.Map[x + LetX, y + LetY].ToString() == "Digger.Sack")
72
					Stay();
73
			}
74
			return new CreatureCommand() { DeltaX = LetX, DeltaY = LetY };
75
		}
76
77
		public bool DeadInConflict(ICreature conflictedObject)
78
		{
79
			var neighbor = conflictedObject.ToString();
80
			if (neighbor == "Digger.Gold")
81
				Game.Scores += 10;
82
			if (neighbor == "Digger.Sack" ||
83
			neighbor == "Digger.Monster")
84
			{
85
				return true;
86
			}
87
			return false;
88
		}
89
90
		public int GetDrawingPriority()
91
		{
92
			return 1;
93
		}
94
95
		public string GetImageFileName()
96
		{
97
			return "Digger.png";
98
		}
99
100
		private static void Stay()
101
		{
102
			LetX = 0;
103
			LetY = 0;
104
		}
105
	}
106
107
	public class Sack : ICreature
108
	{
109
		private int counter = 0;
110
		public static bool DeadlyForPlayer = false;
111
112
		public CreatureCommand Act(int x, int y)
113
		{
114
			if (y < Game.MapHeight - 1)
115
			{
116
				var map = Game.Map[x, y + 1];
117
				if (map == null ||
118
					(counter > 0 && (map.ToString() == "Digger.Player" ||
119
					map.ToString() == "Digger.Monster")))
120
				{
121
					counter++;
122
					return Fall();
123
				}
124
			}
125
126
			if (counter > 1)
127
			{
128
				counter = 0;
129
				return new CreatureCommand() { DeltaX = 0, DeltaY = 0, TransformTo = new Gold() };
130
			}
131
			counter = 0;
132
			return DoNothing();
133
		}
134
135
		public bool DeadInConflict(ICreature conflictedObject)
136
		{
137
			return false;
138
		}
139
140
		public int GetDrawingPriority()
141
		{
142
			return 5;
143
		}
144
145
		public string GetImageFileName()
146
		{
147
			return "Sack.png";
148
		}
149
150
		private CreatureCommand Fall()
151
		{
152
			return new CreatureCommand() { DeltaX = 0, DeltaY = 1 };
153
		}
154
155
		private CreatureCommand DoNothing()
156
		{
157
			return new CreatureCommand() { DeltaX = 0, DeltaY = 0 };
158
		}
159
	}
160
161
	public class Gold : ICreature
162
	{
163
		public CreatureCommand Act(int x, int y)
164
		{
165
			return new CreatureCommand() { DeltaX = 0, DeltaY = 0 };
166
		}
167
168
		public bool DeadInConflict(ICreature conflictedObject)
169
		{
170
			var neighbor = conflictedObject.ToString();
171
			return neighbor == "Digger.Player" || neighbor == "Digger.Monster";
172
		}
173
174
		public int GetDrawingPriority()
175
		{
176
			return 3;
177
		}
178
179
		public string GetImageFileName()
180
		{
181
			return "Gold.png";
182
		}
183
	}
184
185
	public class Monster : ICreature
186
	{
187
		public CreatureCommand Act(int x, int y)
188
		{
189
			int dx = 0;
190
			int dy = 0;
191
192
			if (IsPlayerAlive())
193
			{
194
				if (Player.X == x)
195
				{
196
					if (Player.Y < y) dy = -1;
197
					else if (Player.Y > y) dy = 1;
198
				}
199
200
				else if (Player.Y == y)
201
				{
202
					if (Player.X < x) dx = -1;
203
					else if (Player.X > x) dx = 1;
204
				}
205
				else
206
				{
207
					if (Player.X < x) dx = -1;
208
					else if (Player.X > x) dx = 1;
209
				}
210
			}
211
			else return Stay();
212
213
			if (!(x + dx >= 0 && x + dx < Game.MapWidth &&
214
			y + dy >= 0 && y + dy < Game.MapHeight))
215
				return Stay();
216
217
			var map = Game.Map[x + dx, y + dy];
218
			if (map != null)
219
				if (map.ToString() == "Digger.Terrain" ||
220
					map.ToString() == "Digger.Sack" ||
221
					map.ToString() == "Digger.Monster")
222
					return Stay();
223
			return new CreatureCommand() { DeltaX = dx, DeltaY = dy };
224
		}
225
226
		public bool
227
 
228
		DeadInConflict(ICreature conflictedObject)
229
		{
230
			var neighbor = conflictedObject.ToString();
231
			return neighbor == "Digger.Sack" ||
232
			neighbor == "Digger.Monster";
233
		}
234
235
		public int GetDrawingPriority()
236
		{
237
			return 0;
238
		}
239
240
		public string GetImageFileName()
241
		{
242
			return "Monster.png";
243
		}
244
245
		static private CreatureCommand Stay()
246
		{
247
			return new CreatureCommand() { DeltaX = 0, DeltaY = 0 };
248
		}
249
250
		static private bool IsPlayerAlive()
251
		{
252
			for (int i = 0; i < Game.MapWidth; i++)
253
			for (int j = 0; j < Game.MapHeight; j++)
254
			{
255
				var map = Game.Map[i, j];
256
				if (map != null)
257
				{
258
					if (map.ToString() == "Digger.Player")
259
					{
260
						Player.X = i;
261
						Player.Y = j;
262
						return true;
263
					}
264
				}
265
			}
266
			return false;
267
		}
268
	}
269
}