Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2012, 16:20   #1
Nemfoman
 
Регистрация: 08.04.2012
Сообщений: 9
По умолчанию Делаю игру крестики на 19х19

почему не выводятся крестики и нолики???
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;
 var
   Form1: TForm1;
   xo:bool;   //
implementation

{$R *.dfm}

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
var
 i,j:integer;
 summvert,summhorz,summdiag1,summdiag2:string;
begin
if xo
 then stringgrid1.Cells[ACol,ARow]:='X'
 else stringgrid1.Cells[ACol,ARow]:='O'; // -, -
xo:=not xo; // 
for i:=0 to 19 do       //
 for j:=0 to 19 do
 begin
  summvert:=stringgrid1.cells[i,j]+stringgrid1.cells[i+1,j]+stringgrid1.cells[i+2,j]+stringgrid1.cells[i+3,j]+stringgrid1.cells[i+4,j];
  summhorz:=stringgrid1.cells[i,j]+stringgrid1.cells[i,j+1]+stringgrid1.cells[i,j+2]+stringgrid1.cells[i,j+3]+stringgrid1.cells[i,j+4];
  summdiag1:=stringgrid1.cells[i,j]+stringgrid1.cells[i+1,j+1]+stringgrid1.cells[i+2,j+2]+stringgrid1.cells[i+3,j+3]+stringgrid1.cells[i+4,j+4];
  summdiag2:=stringgrid1.cells[i,j+4]+stringgrid1.cells[i+1,j+3]+stringgrid1.cells[i+2,j+2]+stringgrid1.cells[i+3,j+1]+stringgrid1.cells[i+4,j];
  if (summvert='XXXXX') or (summhorz='XXXXX') or (summdiag1='XXXXX') or(summdiag2='XXXXX') then MessageDlg('X-win', mtInformation,[mbOk], 0);
  if (summvert='OOOOO') or (summhorz='OOOOO') or (summdiag1='OOOOO') or(summdiag2='OOOOO') then MessageDlg('O-win', mtInformation,[mbOk], 0);

 end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
xo:=true;    // -, -   
end;
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 12.04.2012 в 16:48.
Nemfoman вне форума Ответить с цитированием
Старый 12.04.2012, 16:57   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

что значит - "не выводится" ?!
мышкой по ячейкам щёлкали?!

Хотя, конечно, нет проверки на то, что ячейка, куда щёлкнули - пустая.
и второе, проверка на выигрыш организована по индусски!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.04.2012, 17:13   #3
Nemfoman
 
Регистрация: 08.04.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
что значит - "не выводится" ?!
мышкой по ячейкам щёлкали?!

Хотя, конечно, нет проверки на то, что ячейка, куда щёлкнули - пустая.
и второе, проверка на выигрыш организована по индусски!
А как исправить ??? добавить на пустотму
[QUOTE]If Value <> '' then ... ???
А как тогда лучше защите сделать ???
Nemfoman вне форума Ответить с цитированием
Старый 12.04.2012, 17:33   #4
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

В OnCreate добавьте вот это:
Код:
  with stringgrid1 do
  begin
    defaultDrawing:=True;// если этот параметр выставить в false, то никакие 
    //введённые символы отрисовываться не будут

    // в фиксированных ячейках нельзя ничего писать, поэтому уберём их
    FixedCols:=0;
    FixedRows:=0;

    Options:=Options-[goEditing];// защита от ввода символов с клавиатуры
  end;
В SelectCell в самом начале добавьте это:
Код:
  // если ячейка не пустая, то выходим
  if (stringgrid1.Cells[ACol,ARow]<>'') then exit;
На счёт индусской проверки не знаю, что не понравилось Serge_Bliznykov. Но вот после чьего-либо выигрыша, я бы опустошил все ячейки. Иначе при каждом новом нажатии после выигрыша, мы так и будет получать ваше сообщение.
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 12.04.2012 в 17:39.
Rin вне форума Ответить с цитированием
Старый 12.04.2012, 18:03   #5
Nemfoman
 
Регистрация: 08.04.2012
Сообщений: 9
По умолчанию

Спасибо вписал, но всеравно ничего не ставится, прикреплю файл((((((

http://files.mail.ru/M5PGI0
Nemfoman вне форума Ответить с цитированием
Старый 12.04.2012, 18:47   #6
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

А события OnCreate и SelectCell в объектном инспекторе сами подключатся? Копировать код, дело может быть и хорошее, но вот понимать как 'nj работает надо.

Во-первых, надо было в OnCreate засунуть настройку StringGrid1, а не в SelectCell. Во-вторых, оказывается, что этого делать не надо было, ибо эти настройки уже стоят.
В-третьих, ColCount и RowCount должны быть равны 20, а не 19.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 12.04.2012, 20:47   #7
Nemfoman
 
Регистрация: 08.04.2012
Сообщений: 9
По умолчанию

Я в школе учусь, и потому что я учусь в а классе, нам надо делать проект по инфе в виде программы. Делаем мы его мягко говоря не по желанию, ибо в конце года итог контрольная, НО максимальная оценка за него 3.
Если пишу проект, то либо 4 или 5.
Я сдаю физику и бля меня програмирование это оч жестоко !
Помоги пожалуйта с проктом!!!
Nemfoman вне форума Ответить с цитированием
Старый 12.04.2012, 21:06   #8
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

В объектном инспекторе(Object Inspector) выбери StringGrid1, перейди на вкладку Events, там найди строку onSelectCell и напротив неё нажми дважды мышкой. Тоже самое сделай для onCreate, только выбирая в объектном инспекторе Form1.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 12.04.2012, 21:28   #9
Nemfoman
 
Регистрация: 08.04.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение
В объектном инспекторе(Object Inspector) выбери StringGrid1, перейди на вкладку Events, там найди строку onSelectCell и напротив неё нажми дважды мышкой. Тоже самое сделай для onCreate, только выбирая в объектном инспекторе Form1.
Да мать моя родная !! Заработало !! Пасыбаааааа!!
Зас начну с мейнменю все делать, и очитку после игры )
Nemfoman вне форума Ответить с цитированием
Старый 13.04.2012, 00:07   #10
Nemfoman
 
Регистрация: 08.04.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Nemfoman Посмотреть сообщение
Да мать моя родная !! Заработало !! Пасыбаааааа!!
Зас начну с мейнменю все делать, и очитку после игры )
Как реализовать очистку игрового поля ( привода значений к нулю, и начало новой игры ) ????
Nemfoman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делаю игру "змейка". Grenade Gamedev - cоздание игр: Unity, OpenGL, DirectX 34 13.03.2010 16:14
Как реализовать игру крестики-нолики по сети maxxozz Общие вопросы по Java, Java SE, Kotlin 8 06.12.2009 13:42
Делаю 3d игру Alex2009 Gamedev - cоздание игр: Unity, OpenGL, DirectX 135 18.09.2009 15:11
Делаю простую игру, есть вопросы Sergeu Общие вопросы Delphi 19 25.01.2009 22:46