static void jatekosMeghal(Jatekos aldozat, UInt32 tettesJatekosID) { if (!aldozat.Ele) { return; } Jatekos j; String tettesNev; if (!Jatekosok.TryGetValue(tettesJatekosID, out j)) { tettesNev = "Ismeretlen"; } else { tettesNev = j.Nev; } aldozat.Ele = false; csomiSzoras( new ChatCsomi( aldozat.ID, String.Format( "Jajj meghaltam, Tettes:{0}", tettesNev ) ) ); }
public Bomba(Jatekos jatekos, uint x, uint y) { this.Rendzs = jatekos.Rendzs; this.Jatekos_ID = jatekos.ID; this.x = x; this.y = y; }
static void Main(string[] args) { szerverneve = Console.ReadLine(); info = new Thread(new ThreadStart(info_szal)); info.Start(); TcpListener tl = new TcpListener(60000); tl.Start();//halgatozás inditása palya_init(35, 35); // jatekos_pozicio_generalas while (true)//csatlakozos cikls { if (tl.Pending()) { Jatekos j = new Jatekos() { ID = Jatekos_ID_Szamlalo++, Nev = "", Rendzs = 1, Maxbombaszam = 1, Ele = true, Sebesseg = 1, Uzisor = new ConcurrentQueue <string>(), tcp = tl.AcceptTcpClient(), thread = new Thread(new ParameterizedThreadStart(jatekos_szal)) }; Jatekosok.Add(j.ID, j); j.thread.Start(j); } if (Console.KeyAvailable) { if (Console.ReadKey().KeyChar == 's') { break; } } } szerverjatekben = true; jatekos_pozicio_generalas(); while (true) { bomba_check(); lang_check(); // palya_kirajzol(); System.Threading.Thread.Sleep(50); } }
static bool jatekos_lep(uint uj_x, uint uj_y, Jatekos j) { if ( uj_y < 0 || uj_x < 0 || uj_y >= palya_magassag || uj_x >= palya_szelesseg ) { return(false); } lock (Palya) { switch (Palya[uj_x, uj_y - 1].Tipus) { case CellaTipus.Ures: break; case CellaTipus.Fal: return(false);; case CellaTipus.Robbanthato_Fal: return(false);; case CellaTipus.Bomba: return(false);; case CellaTipus.Lang: j.Ele = false; break; case CellaTipus.Bomba_Kartya: j.Maxbombaszam += 1; Palya[uj_x, uj_y].Tipus = CellaTipus.Ures; break; case CellaTipus.Lang_Kartya: j.Rendzs += 1; Palya[uj_x, uj_y].Tipus = CellaTipus.Ures; break; case CellaTipus.Halalfej_Kartya: break; case CellaTipus.Sebesseg_Kartya: break; case CellaTipus.Lab_Kartya: break; case CellaTipus.Kesztyu_Kartya: break; } } return(true); }
static void jatekos_pozicio_generalas() { uint x_db = (palya_szelesseg - 2 - 1) / 2; uint y_db = (palya_magassag - 2 - 1) / 2; for (int i = 0; i < Jatekosok.Count; i++) { while (true) { uint x = (uint)(1 + r.Next((int)x_db) * 2); uint y = (uint)(1 + r.Next((int)y_db) * 2); bool talaltunke = false; for (int j = 0; j < i; j++) { Jatekos jj = Jatekosok.Values.ElementAt(j); if (jj.x == x && jj.y == y) { talaltunke = true; break; } } if (!talaltunke) { Jatekos jj = Jatekosok.Values.ElementAt(i); jj.x = x; jj.y = y; // Jatekosok[jj.ID] = jj; Palya[x, y].Tipus = CellaTipus.Ures; Palya[x + 1, y].Tipus = CellaTipus.Ures; Palya[x, y + 1].Tipus = CellaTipus.Ures; break; } } } /*foreach (Jatekos j in Jatekosok.Values.ToList()) * Console.WriteLine("ID={0} Nev={1} x={2} y={3}", j.ID, j.Nev, j.x, j.y); */ }
static void bomba_telepites(Jatekos jatekos) { if (jatekos.Actbombaszam >= jatekos.Maxbombaszam) { return; } if (!palya.uresE(jatekos.x, jatekos.y)) { return; } Bomba b = new Bomba(jatekos, jatekos.x, jatekos.y); Bombak.Add(b.ID, b); palya.bombaTelepit(b); jatekos.Actbombaszam++; }
public JatekosAdatokCsomi(Jatekos Jatekos) : base(Server_Uzi_Tipusok.Jatekos_Adatok) { this.Jatekos = Jatekos; }
static void jatekos_szal(Object param) { Jatekos j = (Jatekos)param; try { using (BinaryWriter bw = new BinaryWriter(j.tcp.GetStream())) { using (BinaryReader br = new BinaryReader(j.tcp.GetStream())) { bool Bemutatkozott = false; while (true) { if (j.tcp.Available > 0) { int uzi_tipus = br.Read(); switch ((Jatekos_Uzi_Tipusok)uzi_tipus) { case Jatekos_Uzi_Tipusok.Bemutatkozik: j.Nev = br.ReadString(); int r = br.ReadByte(); int g = br.ReadByte(); int b = br.ReadByte(); j.Szin = System.Drawing.Color.FromArgb(r, g, b); break; case Jatekos_Uzi_Tipusok.Lep_Fel: if (!Bemutatkozott) { break; } if (!j.Ele) { break; } if (jatekos_lep(j.x, j.y - 1, j)) { j.y -= 1; } break; case Jatekos_Uzi_Tipusok.Lep_Jobbra: if (!Bemutatkozott) { break; } if (!j.Ele) { break; } if (jatekos_lep(j.x, j.y - 1, j)) { j.x += 1; } break; case Jatekos_Uzi_Tipusok.Lep_Le: if (!Bemutatkozott) { break; } if (!j.Ele) { break; } if (jatekos_lep(j.x, j.y - 1, j)) { j.y += 1; } break; case Jatekos_Uzi_Tipusok.Lep_Balra: if (!Bemutatkozott) { break; } if (!j.Ele) { break; } if (jatekos_lep(j.x, j.y - 1, j)) { j.x -= 1; } break; case Jatekos_Uzi_Tipusok.Bombat_rak: if (!Bemutatkozott) { break; } if (!j.Ele) { break; } bomba_telepites(j.ID, j.x, j.y); break; case Jatekos_Uzi_Tipusok.Chat: String uzike = br.ReadString(); String s = String.Format("{0}({1}):{2}", j.Nev, j.ID, uzike); Console.WriteLine(s); uzi_szoras(s); break; } } String uzi; if (j.Uzisor.TryDequeue(out uzi)) { bw.Write((byte)Server_Uzi_Tipusok.Chat); bw.Write(uzi); bw.Flush(); } bw.Write((byte)Server_Uzi_Tipusok.Jatekosok_Pozicioja); foreach (Jatekos jj in Jatekosok.Values.ToList()) { bw.Write(jj.ID); bw.Write(jj.Nev); bw.Write(jj.Ele); bw.Write(jj.Szin.R); bw.Write(jj.Szin.G); bw.Write(jj.Szin.B); bw.Write(jj.x); bw.Write(jj.y); } bw.Write((uint)0); bw.Flush(); bw.Write((byte)Server_Uzi_Tipusok.Palyakep); bw.Write(palya_szelesseg); bw.Write(palya_magassag); byte[] t = new byte[palya_szelesseg * palya_magassag]; for (int y = 0, tidx = 0; y < palya_magassag; y++) { for (int x = 0; x < palya_szelesseg; x++) { t[tidx++] = (byte)Palya[x, y].Tipus; } } bw.Write(t); bw.Flush(); System.Threading.Thread.Sleep(20); } } } } catch { } finally { Jatekosok.Remove(j.ID); } }
static void jatekos_szal(Object param) { Jatekos j = (Jatekos)param; try { using (BinaryWriter bw = new BinaryWriter(j.tcp.GetStream())) { using (BinaryReader br = new BinaryReader(j.tcp.GetStream())) { bool Bemutatkozott = false; while (true) { if (j.tcp.Available > 0) { int uzi_tipus = br.ReadByte(); switch ((Jatekos_Uzi_Tipusok)uzi_tipus) { case Jatekos_Uzi_Tipusok.Bemutatkozik: Bemutatkozott = true; j.Nev = br.ReadString(); UInt32 hossz = br.ReadUInt32(); j.Arc = br.ReadBytes((int)hossz); csomiSzoras(new JatekosAdatokCsomi(j)); csomiSzoras(new ChatCsomi(j.ID, "***BELÉPETT**")); break; case Jatekos_Uzi_Tipusok.Lep_Fel: case Jatekos_Uzi_Tipusok.Lep_Jobbra: case Jatekos_Uzi_Tipusok.Lep_Le: case Jatekos_Uzi_Tipusok.Lep_Balra: if (!Bemutatkozott) { break; } if (!j.Ele) { break; } jatekos_lep(j, (Jatekos_Uzi_Tipusok)uzi_tipus); break; case Jatekos_Uzi_Tipusok.Bombat_rak: if (!Bemutatkozott) { break; } if (!j.Ele) { break; } bomba_telepites(j); break; case Jatekos_Uzi_Tipusok.Chat: String uzike = br.ReadString(); csomiSzoras(new ChatCsomi(j.ID, uzike)); break; } } j.CsomiSor.Enqueue(new JatekosokPoziciojaCsomi(Jatekosok.Values.ToList())); j.CsomiSor.Enqueue(new PalyakepCsomi(palya)); Csomi tmp; while (j.CsomiSor.TryDequeue(out tmp)) { tmp.becsomagol(bw); } System.Threading.Thread.Sleep(25); } } } } catch { csomiSzoras(new ChatCsomi(j.ID, "***TCP CONNECTION KILLED***")); } finally { Jatekosok.Remove(j.ID); csomiSzoras(new ChatCsomi(j.ID, "***CLOSED***")); } Jatekosok.Remove(j.ID); }
static void jatekos_lep(Jatekos j, Jatekos_Uzi_Tipusok irany) { uint uj_x = j.x; uint uj_y = j.y; switch (irany) { case Jatekos_Uzi_Tipusok.Lep_Jobbra: uj_x++; if (uj_x >= palya.Szelesseg) { uj_x = 0; } break; case Jatekos_Uzi_Tipusok.Lep_Le: uj_y++; if (uj_y >= palya.Magassag) { uj_y = 0; } break; case Jatekos_Uzi_Tipusok.Lep_Balra: if (uj_x == 0) { uj_x = palya.Szelesseg - 1; } else { uj_x--; } break; case Jatekos_Uzi_Tipusok.Lep_Fel: if (uj_y == 0) { uj_y = palya.Magassag - 1; } else { uj_y--; } break; } lock (palya) { switch (palya.Cellak[uj_x, uj_y].Tipus) { case CellaTipus.Ures: break; case CellaTipus.Fal: return; case CellaTipus.Robbanthato_Fal: return; case CellaTipus.Bomba: if (j.Lab == 0) { return; } Bomba b; if (!Bombak.TryGetValue(palya.Cellak[uj_x, uj_y].Bomba_ID, out b)) { return; } if (!bombaMozgat(b, irany)) { return; } j.x = uj_x; j.y = uj_y; for (int i = (int)j.Lab - 1; i > 0; i--) { if (!bombaMozgat(b, irany)) { return; } } break; case CellaTipus.Lang: UInt32 langid = palya.Cellak[uj_x, uj_y].Lang_ID; Lang l; if (Langok.TryGetValue(langid, out l)) { jatekosMeghal(j, l.Jatekos_ID); } else { jatekosMeghal(j, 0); } break; case CellaTipus.Bomba_Kartya: j.Maxbombaszam += 1; palya.cellaTorol(uj_x, uj_y); break; case CellaTipus.Lang_Kartya: j.Rendzs += 1; palya.cellaTorol(uj_x, uj_y); break; case CellaTipus.Halalfej_Kartya: break; case CellaTipus.Sebesseg_Kartya: break; case CellaTipus.Lab_Kartya: j.Lab += 1; palya.cellaTorol(uj_x, uj_y); break; case CellaTipus.Kesztyu_Kartya: break; } } j.x = uj_x; j.y = uj_y; }
static void Main(string[] args) { palya.betolt("palya1.png"); palya.robbanthatoFalGeneralas(0.7); //szerverneve = Console.ReadLine(); szerverneve = "Szerver"; Console.WriteLine("szerver elindult {0} néven", szerverneve); info = new Thread(new ThreadStart(info_szal)); info.Start(); TcpListener tl = new TcpListener(60000); tl.Start(); while (true) // Csatalakozós ciklus { if (tl.Pending()) { Jatekos j = new Jatekos() { tcp = tl.AcceptTcpClient(), thread = new Thread(new ParameterizedThreadStart(jatekos_szal)) }; j.CsomiSor.Enqueue(new ChatCsomi(0, "Üdv a világomban!")); foreach (Jatekos tmpj in Jatekosok.Values.ToList()) { j.CsomiSor.Enqueue(new JatekosAdatokCsomi(tmpj)); } Jatekosok.Add(j.ID, j); j.thread.Start(j); } if (Console.KeyAvailable) { if (Console.ReadKey().KeyChar == 's') { break; } } } szerverjatekban = true; jatekos_pozicio_generalas(); while (true) { bomba_check(); lang_check(); palya.kirajzol(); int tmp = 0; foreach (Jatekos j in Jatekosok.Values.ToList()) { if (j.Ele) { tmp++; } } if (tmp < 2) { palya.cellakTorol(); palya.robbanthatoFalGeneralas(0.7); Bombak.Clear(); Langok.Clear(); foreach (Jatekos j in Jatekosok.Values.ToList()) { j.kezdoAllapot(); } jatekos_pozicio_generalas(); } System.Threading.Thread.Sleep(50); } }