Sayfayı Yazdır | Pencereyi Kapat

runtime error

Nereden Yazdırıldığı: Clomosy | Forum
Kategori: Genel Programlama
Forum Adı: Genel İşlemler
Forum Tanımlaması: TRObject dili ile programlama yaparken karşılaşılan genel işlemler
URL: https://forum.clomosy.com.tr/forum_posts.asp?TID=1513
Tarih: 11 Mayıs 2026 Saat 17:37
Program Versiyonu: Web Wiz Forums 12.07 - https://www.webwizforums.com


Konu: runtime error
Mesajı Yazan: Mali Demirok
Konu: runtime error
Mesaj Tarihi: 11 Mayıs 2026 Saat 14:59
var
  Form1: TclForm;
  Timer1: TClTimer;
  GridW, GridH: Integer;
  SnakeX: array[0..100] of Integer;
  SnakeY: array[0..100] of Integer;
  SnakeLen: Integer;
  FoodX, FoodY: Integer;
  DirX, DirY: Integer;
  OyunBitti: Boolean;
  Puan: Integer;
  GameMemo: TclMemo;

void YemekUret;
var
  i: Integer;
  Gecerli: Boolean;
{
  Gecerli = False;
  while (not Gecerli)
  {
    Gecerli = True;
    FoodX = Random(GridW);
    FoodY = Random(GridH);
    for (i = 0 to SnakeLen - 1)
    {
      if ((SnakeX == FoodX) && (SnakeY == FoodY))
      {
        Gecerli = False;
        break;
      }
    }
  }
}

void Ciz;
var
  i, x, y: Integer;
  Satir, Ekran: String;
  YilanVar: Boolean;
{
  Ekran = '';
  for (x = 0 to GridW + 1) Ekran = Ekran + '#';
  Ekran = Ekran + #13;
  
  for (y = 0 to GridH - 1)
  {
    Satir = '#';
    for (x = 0 to GridW - 1)
    {
      if ((SnakeX[0] == x) && (SnakeY[0] == y))
      {
        Satir = Satir + 'O';
      }
      else
      {
        YilanVar = False;
        for (i = 1 to SnakeLen - 1)
        {
          if ((SnakeX == x) && (SnakeY == y))
          {
            YilanVar = True;
            break;
          }
        }
        
        if (YilanVar)
          Satir = Satir + 'o';
        else if ((FoodX == x) && (FoodY == y))
          Satir = Satir + 'F';
        else
          Satir = Satir + '.';
      }
    }
    Ekran = Ekran + Satir + '#' + #13;
  }
  
  for (x = 0 to GridW + 1) Ekran = Ekran + '#';
  Ekran = Ekran + #13 + 'PUAN: ' + IntToStr(Puan);
  
  if (OyunBitti) 
    Ekran = Ekran + #13 + 'OYUN BITTI! [R] Yeniden Baslat';
    
  GameMemo.Lines.Text = Ekran;
}

void Hareket;
var
  i: Integer;
  YeniX, YeniY: Integer;
  YemekYendi: Boolean;
{
  if (OyunBitti) exit;
  
  YeniX = SnakeX[0] + DirX;
  YeniY = SnakeY[0] + DirY;
  
  if ((YeniX < 0) || (YeniX >= GridW) || (YeniY < 0) || (YeniY >= GridH))
  {
    OyunBitti = True;
    Ciz;
    exit;
  }
  
  YemekYendi = (YeniX == FoodX) && (YeniY == FoodY);
  
  if (YemekYendi)
  {
    SnakeLen = SnakeLen + 1;
    Puan = Puan + 10;
    for (i = SnakeLen - 1 downto 1)
    {
      SnakeX = SnakeX[i-1];
      SnakeY = SnakeY[i-1];
    }
    YemekUret;
  }
  else
  {
    for (i = SnakeLen - 1 downto 1)
    {
      SnakeX = SnakeX[i-1];
      SnakeY = SnakeY[i-1];
    }
  }
  
  SnakeX[0] = YeniX;
  SnakeY[0] = YeniY;
  
  for (i = 1 to SnakeLen - 1)
  {
    if ((SnakeX[0] == SnakeX) && (SnakeY[0] == SnakeY))
    {
      OyunBitti = True;
      break;
    }
  }
  Ciz;
}

void Baslat;
var
  i: Integer;
{
  GridW = 20;
  GridH = 12;
  SnakeLen = 3;
  for (i = 0 to SnakeLen - 1)
  {
    SnakeX = 10 - i;
    SnakeY = 6;
  }
  DirX = 1;
  DirY = 0;
  OyunBitti = False;
  Puan = 0;
  YemekUret;
  Ciz;
}

void TimerOlayi;
{
  Hareket;
}

void FormKeyDown;
{
  if (OyunBitti)
  {
    if (UpperCase(Form1.clSenderKeyChar) == 'R') Baslat;
    exit;
  }
  
  if (UpperCase(Form1.clSenderKeyChar) == 'W') 
    if (DirY <> 1) 
    DirX = 0; DirY = -1;
      
  if (UpperCase(Form1.clSenderKeyChar) == 'S') 
    if (DirY <> -1) DirX = 0; DirY = 1;
  if (UpperCase(Form1.clSenderKeyChar) == 'A') 
    if (DirX <> 1) DirX = -1; DirY = 0;
  if (UpperCase(Form1.clSenderKeyChar) == 'D') 
    if (DirX <> -1) DirX = 1; DirY = 0;
}

{
  Form1 = TclForm.Create(Self);
  
  GameMemo = Form1.AddNewMemo(Form1, 'GameMemo', '');
  GameMemo.Align = alClient;
  GameMemo.ReadOnly = True;
  
  Timer1 = Form1.AddNewTimer(Form1, 'Timer1', 200);
  Timer1.Enabled = True;
  
  Form1.AddNewEvent(Timer1, tbeOnTimer, 'TimerOlayi');
  Form1.AddNewEvent(Form1, tbeOnKeyDown, 'FormKeyDown');
  
  Baslat;
  Form1.Run;
}       sa kodum runtime error alıyor düzeltir misiniz
https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" rel="nofollow - https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon="{"version":"2024.11.0","token":"439455f3e46c40b98dbd42a2f1a954d8","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous">



Cevaplar:
Mesajı Yazan: M-Guney
Mesaj Tarihi: 11 Mayıs 2026 Saat 16:28
Runtime ve harf algılama hatalarının çözülmüş hali bu şekildedir.


var
  Form1: TclForm;
  Timer1: TClTimer;
  GridW, GridH: Integer;
  SnakeX: array[0..100] of Integer;
  SnakeY: array[0..100] of Integer;
  SnakeLen: Integer;
  FoodX, FoodY: Integer;
  DirX, DirY: Integer;
  OyunBitti: Boolean;
  Puan: Integer;
  GameMemo: TclMemo;

void YemekUret;
var
  i: Integer;
  Gecerli: Boolean;
{
  Gecerli = False;
  while (not Gecerli)
  {
    Gecerli = True;
    FoodX = Random(GridW);
    FoodY = Random(GridH);
    for (i = 0 to SnakeLen - 1)
    {
      // DÜZELTME: SnakeX ve SnakeY yanına eklendi
      if ((SnakeX == FoodX) && (SnakeY == FoodY))
      {
        Gecerli = False;
        break;
      }
    }
  }
}

void Ciz;
var
  i, x, y: Integer;
  Satir, Ekran: String;
  YilanVar: Boolean;
{
  Ekran = '';
  for (x = 0 to GridW + 1) Ekran = Ekran + '#';
  Ekran = Ekran + #13;
  
  for (y = 0 to GridH - 1)
  {
    Satir = '#';
    for (x = 0 to GridW - 1)
    {
      if ((SnakeX[0] == x) && (SnakeY[0] == y))
      {
        Satir = Satir + 'O';
      }
      else
      {
        YilanVar = False;
        for (i = 1 to SnakeLen - 1)
        {
          // DÜZELTME: SnakeX ve SnakeY yanına eklendi
          if ((SnakeX == x) && (SnakeY == y))
          {
            YilanVar = True;
            break;
          }
        }
        
        if (YilanVar)
          Satir = Satir + 'o';
        else if ((FoodX == x) && (FoodY == y))
          Satir = Satir + 'F';
        else
          Satir = Satir + '.';
      }
    }
    Ekran = Ekran + Satir + '#' + #13;
  }
  
  for (x = 0 to GridW + 1) Ekran = Ekran + '#';
  Ekran = Ekran + #13 + 'PUAN: ' + IntToStr(Puan);
  
  if (OyunBitti) 
    Ekran = Ekran + #13 + 'OYUN BITTI! [R] Yeniden Baslat';
    
  GameMemo.Lines.Text = Ekran;
}

void Hareket;
var
  i: Integer;
  YeniX, YeniY: Integer;
  YemekYendi: Boolean;
{
  if (OyunBitti) exit;
  
  YeniX = SnakeX[0] + DirX;
  YeniY = SnakeY[0] + DirY;
  
  if ((YeniX < 0) || (YeniX >= GridW) || (YeniY < 0) || (YeniY >= GridH))
  {
    OyunBitti = True;
    Ciz;
    exit;
  }
  
  YemekYendi = (YeniX == FoodX) && (YeniY == FoodY);
  
  if (YemekYendi)
  {
    SnakeLen = SnakeLen + 1;
    Puan = Puan + 10;
    for (i = SnakeLen - 1 downto 1)
    {
      // DÜZELTME: SnakeX ve SnakeY atamalarına eklendi
      SnakeX = SnakeX[i-1];
      SnakeY = SnakeY[i-1];
    }
    YemekUret;
  }
  else
  {
    for (i = SnakeLen - 1 downto 1)
    {
      // DÜZELTME: SnakeX ve SnakeY atamalarına eklendi
      SnakeX = SnakeX[i-1];
      SnakeY = SnakeY[i-1];
    }
  }
  
  SnakeX[0] = YeniX;
  SnakeY[0] = YeniY;
  
  for (i = 1 to SnakeLen - 1)
  {
    // DÜZELTME: Kendine çarpma kontrolünde eklendi
    if ((SnakeX[0] == SnakeX) && (SnakeY[0] == SnakeY))
    {
      OyunBitti = True;
      break;
    }
  }
  Ciz;
}

void Baslat;
var
  i: Integer;
{
  GridW = 20;
  GridH = 12;
  SnakeLen = 3;
  for (i = 0 to SnakeLen - 1)
  {
    // DÜZELTME: Başlangıç atamalarına eklendi
    SnakeX = 10 - i;
    SnakeY = 6;
  }
  DirX = 1;
  DirY = 0;
  OyunBitti = False;
  Puan = 0;
  YemekUret;
  Ciz;
}

void TimerOlayi;
{
  Hareket;
}

void FormKeyDown;
{
  //ShowMessage(IntToStr(Form1.clSenderKeyChar))
  if (OyunBitti)
  {
    // R (82) veya r (114) tuşları
    if ((Form1.clSenderKeyChar == 114) || (Form1.clSenderKeyChar == 82)) Baslat; 
    exit;
  }
  
  // W (87) veya w (119)
  if ((Form1.clSenderKeyChar == 119) || (Form1.clSenderKeyChar == 87)) 
  {
    if (DirY <> 1) { DirX = 0; DirY = -1; }
  }
      
  // S (83) veya s (115)
  if ((Form1.clSenderKeyChar == 115) || (Form1.clSenderKeyChar == 83)) 
  {
    if (DirY <> -1) { DirX = 0; DirY = 1; }
  }
    
  // A (65) veya a (97)
  if ((Form1.clSenderKeyChar == 97) || (Form1.clSenderKeyChar == 65)) 
  {
    if (DirX <> 1) { DirX = -1; DirY = 0; }
  }
    
  // D (68) veya d (100)
  if ((Form1.clSenderKeyChar == 100) || (Form1.clSenderKeyChar == 68)) 
  {
    if (DirX <> -1) { DirX = 1; DirY = 0; }
  }
}

{
  Form1 = TclForm.Create(Self);
  
  GameMemo = Form1.AddNewMemo(Form1, 'GameMemo', '');
  GameMemo.Align = alClient;
  GameMemo.ReadOnly = True;
  GameMemo.SetFocus;
  //GameMemo.Enabled = False; // Klavyeyi yutmasını engeller, tuşlar Form'a gider
  
  Timer1 = Form1.AddNewTimer(Form1, 'Timer1', 200);
  Timer1.Enabled = True;
  
  Form1.AddNewEvent(Timer1, tbeOnTimer, 'TimerOlayi');
  Form1.AddNewEvent(GameMemo, tbeOnKeyUp, 'FormKeyDown');
  
  Baslat;
  Form1.Run;
}


https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" rel="nofollow - https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon="{"version":"2024.11.0","token":"439455f3e46c40b98dbd42a2f1a954d8","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous">


Mesajı Yazan: M-Guney
Mesaj Tarihi: 11 Mayıs 2026 Saat 16:29
Harfler ASCII olarak algılanmaktadır. ve ek olarak klavye den basılan harfleri yakalamak açısından event i direk memo ya bağladım bütün ekranı kapladığından

  Form1.AddNewEvent(GameMemo, tbeOnKeyUp, 'FormKeyDown'); https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" rel="nofollow - https://static.cloudflareinsights.com/beacon.min.js/v8c78df7c7c0f484497ecbca7046644da1771523124516" integrity="sha512-8DS7rgIrAmghBFwoOTujcf6D9rXvH8xm8JQ1Ja01h9QX8EzXldiszufYa4IFfKdLUKTTrnSFXLDkUEOTrZQ8Qg==" data-cf-beacon="{"version":"2024.11.0","token":"439455f3e46c40b98dbd42a2f1a954d8","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}" crossorigin="anonymous">



Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 12.07 - https://www.webwizforums.com
Copyright ©2001-2024 Web Wiz Ltd. - https://www.webwiz.net