From Coral Capybara, 4 Months ago, written in Text.
Embed
  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. namespace pokemon
  8. {
  9.     class Program
  10.     {
  11.         public static Random rasgele = new Random();
  12.         public static int x = 15, y = 15;
  13.         public static char tus;
  14.         public static int[] karakter = new int[4];
  15.         public static string[,] harita = new string[x, y];
  16.         public static string[,] harita_gorunur = new string[x, y];
  17.         public static string[,] duvarlar = new string[x, y];
  18.         public static string bosluk = "   ";
  19.         public static string duvarsekil = "░▓░";
  20.         public static string kar = "o_o";
  21.         public static string kar_yandi = "x_x";
  22.         public static string kar_bos = "o_o";
  23.         public static string elmassekil = "░♣░";
  24.         public static string canavarsekil = "-O-";
  25.         public static string portal_sekil = " 0 ";
  26.         public static char zorluk;
  27.         public static int canavar_sayisi = 100;//15 ten sonrasy bo? dizi olacak
  28.         public static int[,] canavar = new int[canavar_sayisi, 3];
  29.         public static int[] canavar_kordinat = new int[canavar_sayisi];
  30.         public static int kalan_elmas = 0;
  31.         public static int portal_sayisi = 0;
  32.         public static int skor = 0;
  33.         public static int can = 3;
  34.         public static int elmas_sayisi = 5;
  35.         public static int portalX = 0;
  36.         public static int portalY = 0;
  37.         public static int elmas_sayisi2 = elmas_sayisi;
  38.         public static int skor_artis = 7;
  39.         public static int[,] elmas = new int[100, 2];
  40.         static void Main(string[] args)
  41.         {
  42.             //  Thread.Sleep(1000); uyutma
  43.             zorluk_sor();
  44.             harita_yukle(x, y);
  45.             duvar_olustur();
  46.             duvar_yazdir(x, y);
  47.             elmas_olustur();
  48.             karakteri_guncelle();
  49.             canavar_olustur();
  50.             harita_yazdir(x, y);
  51.             elmas_yol_ac();
  52.             while (true)
  53.             {
  54.                 portal_ac();
  55.                 canavar_yapayzeka();
  56.                 tuskontrol();
  57.                 if (tus != null) { temizle(); }//ekrany temizleme
  58.                 harita_yazdir(x, y);
  59.                 Console.WriteLine("k:{0}/e:{1} fark:{2}", karakter[0], elmas[0, 0], (karakter[0] - elmas[0, 0]));
  60.                 Console.WriteLine("portalx:{0} portaly:{1}", portalX, portalY);
  61.                 //  Console.WriteLine("y={0} x={1}", karakter[0], karakter[1]); kordinatlary yazdyryr
  62.                 if (can <= 0)
  63.                 {
  64.                     restart(); temizle(); Console.WriteLine("### YANDIN :) ### \n Zorluk degistirmek ister misin??? ");
  65.                     zorluk_sor();
  66.                     kar = kar_bos;
  67.                     karakteri_guncelle();
  68.                     harita_guncelle(x, y);
  69.                     harita_yazdir(x, y);
  70.                 }
  71.             }
  72.         }
  73.         public static void portal_yol_ac()
  74.         {
  75.  
  76.             //y kordinatı için temizleme
  77.             if (karakter[0] <= portalY)
  78.             {
  79.                 for (int yy = karakter[0]; yy < portalY; yy++)
  80.                 {
  81.                     harita[yy, portalX] = "[Y]";
  82.                 }
  83.             }
  84.             else if (karakter[0] > portalY)
  85.             {
  86.                 for (int yy = portalY; yy <= karakter[0]; yy++)
  87.                 {
  88.                     harita[yy, portalX] = "[y]";
  89.                 }
  90.             }
  91.             //x kordinatı için (sonuncu indisten almam lazım karakterden)
  92.             if (karakter[1] <= portalX)
  93.             {
  94.                 for (int xx = karakter[1]; xx < portalX; xx++)
  95.                 {
  96.                     harita[karakter[0], xx] = "[X]";
  97.                 }
  98.             }
  99.             else if (karakter[1] > portalX)
  100.             {
  101.                 for (int xx = portalX; xx < karakter[1]; xx++)
  102.                 {
  103.                     harita[karakter[0], xx] = "[y]";
  104.                 }
  105.             }
  106.             harita_guncelle(x, y);
  107.  
  108.         }
  109.         public static void portal_ac()
  110.         {
  111.             kalan_elmas = 0;
  112.  
  113.             for (int i = 0; i < elmas_sayisi; i++)
  114.             {
  115.                 if (harita[elmas[i, 0], elmas[i, 1]] == elmassekil) { kalan_elmas++; }
  116.             }
  117.             if (kalan_elmas == 0 && portal_sayisi == 0)
  118.             {
  119.                 portalX = rasgele.Next(0, x - 1);
  120.                 portalY = rasgele.Next(0, y - 1);
  121.  
  122.                 harita[portalX, portalY] = portal_sekil;
  123.                 harita_guncelle(x, y);
  124.                 portal_sayisi++;
  125.                 portal_yol_ac();
  126.                 harita_guncelle(x, y);
  127.             }
  128.         }//elmaslar bitince portal aç
  129.         public static void elmas_yol_ac()
  130.         {
  131.             for (int i = 0; i < elmas_sayisi; i++)
  132.             {
  133.                 //y kordinatı için temizleme
  134.                 if (karakter[0] <= elmas[i, 0])
  135.                 {
  136.                     for (int yy = karakter[0]; yy < elmas[i, 0]; yy++)
  137.                     {
  138.                         harita[yy, elmas[i, 1]] = bosluk;
  139.                     }
  140.                 }
  141.                 else if (karakter[0] > elmas[i, 0])
  142.                 {
  143.                     for (int yy = elmas[i, 0]; yy <= karakter[0]; yy++)
  144.                     {
  145.                         harita[yy, elmas[i, 1]] = bosluk;
  146.                     }
  147.                 }
  148.                 //x kordinatı için (sonuncu indisten almam lazım karakterden)
  149.                 if (karakter[1] <= elmas[i, 1])
  150.                 {
  151.                     for (int xx = karakter[1]; xx < elmas[i, 1]; xx++)
  152.                     {
  153.                         harita[karakter[0], xx] = bosluk;
  154.                     }
  155.                 }
  156.                 else if (karakter[1] > elmas[i, 1])
  157.                 {
  158.                     for (int xx = elmas[i, 1]; xx < karakter[1]; xx++)
  159.                     {
  160.                         harita[karakter[0], xx] = bosluk;
  161.                     }
  162.                 }
  163.                 harita_guncelle(x, y);
  164.             }
  165.         }  //her elmastan karaktere yol temizleme
  166.         public static void zorluk_sor()
  167.         {
  168.             Console.WriteLine("ZORLUK SEVIYESI GIRINIZ 1 2 3 \n 1 ZOR \n 2 NORMAL \n 3 KOLAY");
  169.             switch (zorluk = Console.ReadKey().KeyChar)
  170.             {
  171.                 case '1': canavar_sayisi = 15; break;
  172.                 case '2': canavar_sayisi = 10; break;
  173.                 case '3': canavar_sayisi = 5; break;
  174.                 default:
  175.                     Console.WriteLine("kolay mod seçildi");
  176.                     canavar_sayisi = 5;
  177.                     zorluk = '3';
  178.                     break;
  179.             }
  180.  
  181.             temizle();
  182.         }
  183.         public static bool canavarkontrol(string a)
  184.         {
  185.             bool kontrol = true;
  186.             switch (a)
  187.             {
  188.                 case "sol":
  189.                     if (karakter[1] > 0)
  190.                     { if (harita[karakter[0], karakter[1] - 1] == canavarsekil) { kontrol = false; } }
  191.                     break;
  192.                 case "sag":
  193.                     if (karakter[1] < x - 1) { if (harita[karakter[0], karakter[1] + 1] == canavarsekil) { kontrol = false; } }
  194.                     break;
  195.                 case "asagi":
  196.                     if (karakter[0] < y - 1) { if (harita[karakter[0] + 1, karakter[1]] == canavarsekil) { kontrol = false; } }
  197.                     break;
  198.                 case "yukari":
  199.                     if (karakter[0] > 0) { if (harita[karakter[0] - 1, karakter[1]] == canavarsekil) { kontrol = false; } }
  200.                     break;
  201.                 default:
  202.                     break;
  203.             }
  204.             return kontrol;
  205.         }
  206.         public static void canavar_olustur()
  207.         {
  208.             int a, b;
  209.             for (int i = 0; i < canavar_sayisi; i++)
  210.             {
  211.                 while (true)
  212.                 {
  213.                     a = rasgele.Next(0, x - 1);
  214.                     b = rasgele.Next(0, y - 1);
  215.                     if ((harita[a, b] == canavarsekil) && (harita[a, b] == kar))//haritada o kysym doluysa
  216.                     {
  217.                         a = rasgele.Next(0, x - 1);
  218.                         b = rasgele.Next(0, y - 1);
  219.                     }
  220.                     else
  221.                     {//bo?sa
  222.                         canavar[i, 0] = i;//canavar ID si
  223.                         canavar[i, 1] = a;
  224.                         canavar[i, 2] = b;
  225.                         harita[canavar[i, 1], canavar[i, 2]] = canavarsekil;
  226.                         // harita[canavar[i, 1], canavar[i, 2]] = "[B]";
  227.                         break;
  228.                     }
  229.                 }
  230.  
  231.             }
  232.         }
  233.         public static void canavar_yapayzeka()
  234.         {
  235.             int a, b, c;
  236.             string oncekisekil;
  237.             for (int i = 0; i < canavar_sayisi; i++)
  238.             {//canavar hareketinde bozukluk var buraya sonra bak
  239.                 a = 0; b = 0;
  240.                 c = rasgele.Next(1, 3);
  241.                 // Console.WriteLine("c:{0}",c);
  242.                 //sa?-sol mu yukary-a?a?y my gidece?ini belirledik random
  243.                 if (c == 1) { a = rasgele.Next(-1, 2); b = 0; }
  244.                 else { b = rasgele.Next(-1, 2); a = 0; }
  245.                 // if (canavar[i, 1] == 0 && canavar[i, 2] == 0) { a = 1; b = 0; }
  246.                 // Console.WriteLine("a:{0} b:{1}",a, b);  her canavaryn hareket takibi (gidece?i yön)
  247.                 // Console.WriteLine("y:{0} x:{1}", canavar[i, 1], canavar[i,2]); (?uan bulundu?u yön)
  248.  
  249.                 //if (canavar[i, 1] + a < 0) { a = 0; }
  250.                 //if (canavar[i, 2] + b < 0) { b = 0; } syfyrlama yöntemini kaldyrdym
  251.                 if (canavar[i, 1] + a < x
  252.                     && canavar[i, 2] + b < y
  253.                     && canavar[i, 1] + a >= 0
  254.                     && canavar[i, 2] + b >= 0
  255.                     )
  256.                 {
  257.                     if (//canavaryn gidece?i yönde bu ?ekillerden biri yoksa devam etsin
  258.                         (harita[canavar[i, 1] + a, canavar[i, 2] + b] != duvarsekil)
  259.                         && (harita[canavar[i, 1] + a, canavar[i, 2] + b] != elmassekil)
  260.                         && (harita[canavar[i, 1] + a, canavar[i, 2] + b] != kar)
  261.                         && (harita[canavar[i, 1] + a, canavar[i, 2] + b] != canavarsekil)
  262.                         )
  263.                     {
  264.                         oncekisekil = harita[canavar[i, 1] + a, canavar[i, 2] + b];
  265.                         harita[canavar[i, 1], canavar[i, 2]] = oncekisekil;
  266.                         if (canavar[i, 1] + a <= x - 1 && canavar[i, 1] >= 0) { canavar[i, 1] += a; }
  267.                         if (canavar[i, 2] + b <= y - 1 && canavar[i, 2] >= 0) { canavar[i, 2] += b; }
  268.                     }
  269.                 }
  270.                 harita[canavar[i, 1], canavar[i, 2]] = canavarsekil;
  271.             }
  272.         }
  273.         public static bool elmaskontrol(string a)//elmas kontrolü
  274.         {
  275.             bool kontrol = true;
  276.             switch (a)
  277.             {
  278.                 case "sol":
  279.                     if (karakter[1] > 0)
  280.                     { if (harita[karakter[0], karakter[1] - 1] == elmassekil) { kontrol = false; } }
  281.                     break;
  282.                 case "sag":
  283.                     if (harita[karakter[0], karakter[1] + 1] == elmassekil) { kontrol = false; }
  284.                     break;
  285.                 case "asagi":
  286.                     if (harita[karakter[0] + 1, karakter[1]] == elmassekil) { kontrol = false; }
  287.                     break;
  288.                 case "yukari":
  289.                     if (karakter[0] > 0) { if (harita[karakter[0] - 1, karakter[1]] == elmassekil) { kontrol = false; } }
  290.                     break;
  291.                 default:
  292.                     break;
  293.             }
  294.             return kontrol;
  295.         }
  296.         public static void elmas_olustur()
  297.         {
  298.             int elmassayisi = elmas_sayisi;
  299.             for (int i = 0; i < elmassayisi; i++)
  300.             {
  301.                 elmas[i, 0] = rasgele.Next(0, y - 1);
  302.                 elmas[i, 1] = rasgele.Next(0, x - 1);
  303.                 harita[elmas[i, 0], elmas[i, 1]] = elmassekil;
  304.             }
  305.         }
  306.         public static void temizle() { Console.Clear(); }//ekrany temizleme
  307.         public static void harita_yukle(int x, int y)//harita olu?tur
  308.         {
  309.             for (int i = 0; i < x; i++)
  310.             {
  311.                 for (int i2 = 0; i2 < y; i2++)
  312.                 { harita[i, i2] = bosluk; harita_gorunur[i, i2] = bosluk; }
  313.             }
  314.         }
  315.         public static void duvar_olustur()//duvar olu?tur
  316.         {
  317.             for (int i = 0; i < x; i++)
  318.             {
  319.                 for (int i2 = 0; i2 < y; i2++)
  320.                 {
  321.                     if (rasgele.Next(1, 10) == 1) { duvarlar[i, i2] = duvarsekil; }//rastgele duvar olu?tur
  322.                     else { duvarlar[i, i2] = bosluk; }
  323.                 }
  324.             }
  325.         }
  326.         public static bool duvarkontrol(string a)//duvar kontrolü
  327.         {
  328.             bool kontrol = true;
  329.             switch (a)
  330.             {
  331.                 case "sol":
  332.                     if (karakter[1] > 0)
  333.                     { if (harita[karakter[0], karakter[1] - 1] == duvarsekil) { kontrol = false; } }
  334.                     break;
  335.                 case "sag":
  336.                     if (harita[karakter[0], karakter[1] + 1] == duvarsekil) { kontrol = false; }
  337.                     break;
  338.                 case "asagi":
  339.                     if (harita[karakter[0] + 1, karakter[1]] == duvarsekil) { kontrol = false; }
  340.                     break;
  341.                 case "yukari":
  342.                     if (karakter[0] > 0) { if (harita[karakter[0] - 1, karakter[1]] == duvarsekil) { kontrol = false; } }
  343.                     break;
  344.                 default:
  345.                     break;
  346.             }
  347.             return kontrol;
  348.         }
  349.         public static void harita_yazdir(int x, int y)//harita yazdyr
  350.         {
  351.             Console.WriteLine("KALAN ELMAS:{4} ELMASLAR:{2} SKOR:{0} CAN:{1} ZORLUK:{3} www.DCMedya.com", skor, can, elmas_sayisi, zorluk, kalan_elmas);
  352.             for (int i = 0; i < x; i++)
  353.             {
  354.                 for (int i2 = 0; i2 < y; i2++)
  355.                 {
  356.                     if (harita[i, i2] == canavarsekil) { Console.BackgroundColor = ConsoleColor.Red; }//canavar  kyrmyzy
  357.                     if (harita[i, i2] == duvarsekil) { Console.BackgroundColor = ConsoleColor.Black; }//duvar beyaz
  358.                     if (harita[i, i2] == bosluk) { Console.BackgroundColor = ConsoleColor.Black; }//bosluk beyaz
  359.                     if (harita[i, i2] == kar) { Console.BackgroundColor = ConsoleColor.Black; }//karakter beyaz
  360.                     if (harita[i, i2] == null) { Console.BackgroundColor = ConsoleColor.Black; }//null beyaz
  361.                     if (harita[i, i2] == elmassekil) { Console.BackgroundColor = ConsoleColor.DarkBlue; }
  362.                     if (harita[i, i2] == portal_sekil) { Console.BackgroundColor = ConsoleColor.Cyan; }
  363.                     if (kar == kar_yandi && harita[i, i2] == kar) { Console.BackgroundColor = ConsoleColor.Red; }//yanarsa  kyrmyzy
  364.                     Console.Write(harita[i, i2] + "");
  365.                 }
  366.                 Console.WriteLine();
  367.             }
  368.         }
  369.         public static void duvar_yazdir(int x, int y)//duvar yazdyrma
  370.         {
  371.             for (int i = 0; i < x; i++)
  372.             {
  373.                 for (int i2 = 0; i2 < y; i2++)
  374.                 {
  375.                     harita[i, i2] = duvarlar[i, i2];
  376.                 }
  377.             }
  378.         }
  379.         public static void tuskontrol()//tu? kontrolü
  380.         {
  381.             Console.WriteLine("------- W,A,S,D girin (R=restart)--------");
  382.             tus = Console.ReadKey().KeyChar;
  383.             kar = kar_bos;
  384.             switch (tus)
  385.             {//karakter[0]=y karakter[1]=x
  386.                 case 'a':
  387.                     if (!canavarkontrol("sol")) { can -= 1; kar_bos = kar; kar = kar_yandi; karakteri_guncelle(); }
  388.                     else
  389.                     {
  390.                         if (duvarkontrol("sol")) { if (karakter[1] > 0) { if (!elmaskontrol("sol")) { skor += skor_artis; elmas_sayisi--; } harita_guncelle(karakter[2], karakter[3]); karakter[1] -= 1; } }
  391.                     }
  392.                     break;
  393.                 case 'w':
  394.                     if (!canavarkontrol("yukari")) { can -= 1; kar_bos = kar; kar = kar_yandi; karakteri_guncelle(); }
  395.                     else
  396.                     {
  397.                         if (duvarkontrol("yukari")) { if (karakter[0] > 0) { if (!elmaskontrol("yukary")) { skor += skor_artis; elmas_sayisi--; } harita_guncelle(karakter[2], karakter[3]); karakter[0] -= 1; } }
  398.                     }
  399.                     break;
  400.                 case 's':
  401.                     if (!canavarkontrol("asagi")) { can -= 1; kar_bos = kar; kar = kar_yandi; karakteri_guncelle(); }
  402.                     else
  403.                     {
  404.                         if (karakter[0] < (y - 1))
  405.                         {
  406.                             if (duvarkontrol("asagi")) { if (karakter[0] < x - 1) { if (!elmaskontrol("a?a?y")) { skor += skor_artis; elmas_sayisi--; } harita_guncelle(karakter[2], karakter[3]); karakter[0] += 1; } }
  407.                         }
  408.                     }
  409.                     break;
  410.                 case 'd':
  411.                     if (!canavarkontrol("sag")) { can -= 1; kar_bos = kar; kar = kar_yandi; karakteri_guncelle(); }
  412.                     else
  413.                     {
  414.                         if (karakter[1] < (x - 1))
  415.                         {
  416.                             if (duvarkontrol("sag")) { if (karakter[1] < y - 1) { if (!elmaskontrol("sa?")) { skor += skor_artis; elmas_sayisi--; } harita_guncelle(karakter[2], karakter[3]); karakter[1] += 1; } }
  417.                         }
  418.                     }
  419.                     break;
  420.  
  421.                 case 'r': restart(); break;
  422.                 default: Console.WriteLine("bos girme"); break;
  423.             }
  424.             Console.WriteLine();
  425.             karakteri_guncelle();
  426.         }
  427.         public static void karakteri_guncelle()//karakter kordinat güncelleme
  428.         {
  429.             if (karakter[0] < x && karakter[1] < y)
  430.             {
  431.                 karakter[2] = karakter[0];
  432.                 karakter[3] = karakter[1];
  433.                 harita[karakter[0], karakter[1]] = kar;
  434.             }
  435.             if (karakter[0] > x) { karakter[0] -= 1; karakteri_guncelle(); }//karakter synyrlary a?yyorsa geri gelsin
  436.             if (karakter[1] > y) { karakter[1] -= 1; karakteri_guncelle(); }
  437.         }
  438.         public static void harita_guncelle(int a, int b)
  439.         {
  440.             if (a < x && b < y) { harita[a, b] = bosluk; }
  441.         }
  442.         public static void restart()
  443.         {
  444.             elmas_sayisi = elmas_sayisi2;
  445.             portal_sayisi = 0;
  446.             kalan_elmas = 0;
  447.             can = 3;
  448.             skor = 0;
  449.             temizle();
  450.             karakter[0] = rasgele.Next(0, y - 1);//karakterin X kordinaty
  451.             karakter[1] = rasgele.Next(0, x - 1);//karakterin Y kordinaty
  452.             harita_yukle(x, y);
  453.             duvar_olustur();
  454.             duvar_yazdir(x, y);
  455.             karakteri_guncelle();
  456.             canavar_olustur();
  457.             harita_guncelle(x, y);
  458.             elmas_olustur();
  459.             elmas_yol_ac();
  460.             harita_guncelle(x, y);
  461.             harita_yazdir(x, y);
  462.  
  463.         }
  464.     }
  465. }
  466.  
  467.