{"id":139,"date":"2024-12-31T19:28:15","date_gmt":"2024-12-31T22:28:15","guid":{"rendered":"https:\/\/wagnersalvi.eti.br\/?p=139"},"modified":"2024-12-31T19:28:15","modified_gmt":"2024-12-31T22:28:15","slug":"jogo-da-velha-delphi-5","status":"publish","type":"post","link":"http:\/\/www.wagnersalvi.com.br\/?p=139","title":{"rendered":"Jogo da Velha \u2013 Delphi 5"},"content":{"rendered":"\n<p>Abaixo um exemplo de Delphi para se criar um Jogo da Velha.<\/p>\n\n\n\n<p>Este c\u00f3digo abaixo n\u00e3o tem exatamente algum tipo de intelig\u00eancia nas jogadas considerando as possibilidades poss\u00edveis.<\/p>\n\n\n\n<p>Neste caso \u00e9 um jogo simples ser\u00e1 visto que \u00e9 usada a Fun\u00e7\u00e3o Random que ir\u00e1 gerar um n\u00famero aleat\u00f3rio de 1 a 9 (tem 9 posi\u00e7\u00f5es poss\u00edveis na janela). Gerando um n\u00famero de 1 a 9 e esta\u00a0 posi\u00e7\u00e3o em branco , ele marca como sendo o jogo da m\u00e1quina (procedure JogadaMaquina) e j\u00e1 executa a avalia\u00e7\u00e3o de avalia\u00e7\u00e3o de ganhador, onde avalia se formou tr\u00eas figuras iguais na horizontal, vertical ou diagonal (procedure AvaliaGanhador).<\/p>\n\n\n\n<p>Como um desafio para quem est\u00e1 aprendendo l\u00f3gica, proponho criar \u201cintelig\u00eancia\u201d ao jogo, como por exemplo avaliar antes da maquina fazer a jogada verificar se j\u00e1 existe uma posi\u00e7\u00e3o que se o maquina jogar ele fecha o jogo.<\/p>\n\n\n\n<p>O desafio aqui \u00e9 passar a sua forma de analisar se existe uma jogada que pode ganhar o jogo, n\u00e3o necessariamente fazendo uma analise que ir\u00e1 tentar prever&nbsp; a pr\u00f3xima jogada (Intelig\u00eancia Artificial), mas \u00e9 muito util&nbsp; para treinar passar algo que voc\u00ea faz quase por instinto em uma l\u00f3gica de programa\u00e7\u00e3o.<\/p>\n\n\n\n<p>A janela a ser criada deve ser algo deste tipo, com os mesmos tipos e nomes dos componentes (ou caso mudem, mudar no c\u00f3digo tamb\u00e9m).<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"541\" height=\"374\" src=\"https:\/\/wagnersalvi.eti.br\/wp-content\/uploads\/2024\/12\/telajogovelha.png\" alt=\"\" class=\"wp-image-140\" srcset=\"http:\/\/www.wagnersalvi.com.br\/wp-content\/uploads\/2024\/12\/telajogovelha.png 541w, http:\/\/www.wagnersalvi.com.br\/wp-content\/uploads\/2024\/12\/telajogovelha-300x207.png 300w\" sizes=\"auto, (max-width: 541px) 100vw, 541px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>unit Unit2;\n\ninterface\n\nuses\n  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\n  Buttons, StdCtrls;\n\ntype\n  TForm2 = class(TForm)\n    Reiniciar: TButton;\n    botao11: TSpeedButton;\n    botao12: TSpeedButton;\n    botao13: TSpeedButton;\n    botao21: TSpeedButton;\n    botao22: TSpeedButton;\n    botao23: TSpeedButton;\n    botao31: TSpeedButton;\n    botao32: TSpeedButton;\n    botao33: TSpeedButton;\n    procedure ReiniciarClick(Sender: TObject);\n    procedure FormShow(Sender: TObject);\n    procedure botaoClick(Sender: TObject);\n    procedure JogadaMaquina;\n    procedure AvaliaGanhador(xValorConsiderado: String);\n  private\n    { Private declarations }\n  public\n    { Public declarations }\n    xJogada: Integer;\n    Jogadas: Array of String;\n    FimJogo: boolean;\n\n  end;\n\nvar\n  Form2: TForm2;\n\nimplementation\n\n{$R *.DFM}\n\nprocedure TForm2.ReiniciarClick(Sender: TObject);\nvar i: integer;\nbegin\n  for i := 0 to ComponentCount -1 do\n   begin\n     if Components&#91;I].ClassType = TSpeedButton then\n       begin\n         TSpeedButton(Components&#91;i]).Caption := '';\n       end;\n   end;\n   xJogada := 0;\n   SetLength(Jogadas,0);\n   SetLength(Jogadas,9);\n   FimJogo:= False;\nend;\n\nprocedure TForm2.FormShow(Sender: TObject);\nbegin\n  ReiniciarClick(Sender);\nend;\n\nprocedure TForm2.botaoClick(Sender: TObject);\nbegin\n  if FimJogo = false then\n   begin\n      if TSpeedButton(Sender).Caption &lt;> '' then\n        begin\n          ShowMessage('Posi\u00e7\u00e3o j\u00e1 escolhida');\n          abort;\n        end;\n\n      TSpeedButton(Sender).Caption := 'X';\n      Jogadas&#91;TSpeedButton(Sender).Tag] := 'X';\n      xJogada := xJogada +1;\n      JogadaMaquina;\n      AvaliaGanhador('X');\n      AvaliaGanhador('0');\n   end;\nend;\n\nprocedure TForm2.JogadaMaquina;\nvar AchouVago: Boolean;\nxPosicaoJogar, i : Integer;\nbegin\n  if xJogada &lt;9 then\n    begin\n      AchouVago := False;\n      while AchouVago  = false do\n        begin\n          xPosicaoJogar := Random(9);\n          for i := 0 to ComponentCount -1 do\n           begin\n             if Components&#91;I].ClassType = TSpeedButton then\n               begin\n                 if (TSpeedButton(Components&#91;i]).Tag = xPosicaoJogar + 1) and\n                    (TSpeedButton(Components&#91;i]).Caption = '') then\n                   begin\n                       TSpeedButton(Components&#91;i]).Caption := '0';\n                       Jogadas&#91;TSpeedButton(Components&#91;i]).Tag] := '0';\n                       AchouVago:= true;\n                       xJogada := xJogada +1;\n                   end;\n               end;\n           end;\n        end;\n    end;\nend;\n\nprocedure TForm2.AvaliaGanhador(xValorConsiderado: String);\nvar Mensagem: String;\nbegin\n  if FimJogo = false then\n    begin\n      if xValorConsiderado = 'X' then\n        Mensagem := 'Voc\u00ea Ganhou!'\n      else\n        Mensagem := 'Voc\u00ea Perdeu!';\n         \/\/ horizontal\n      if ((Jogadas&#91;0] = Jogadas&#91;1]) and (Jogadas&#91;1] = Jogadas&#91;2]) and (Jogadas&#91;2] = xValorConsiderado)) or\n         ((Jogadas&#91;3] = Jogadas&#91;4]) and (Jogadas&#91;4] = Jogadas&#91;5]) and (Jogadas&#91;5] = xValorConsiderado)) or\n         ((Jogadas&#91;6] = Jogadas&#91;7]) and (Jogadas&#91;7] = Jogadas&#91;8]) and (Jogadas&#91;8] = xValorConsiderado)) or\n         \/\/ vertical\n         ((Jogadas&#91;0] = Jogadas&#91;3]) and (Jogadas&#91;3] = Jogadas&#91;6]) and (Jogadas&#91;6] = xValorConsiderado)) or\n         ((Jogadas&#91;1] = Jogadas&#91;4]) and (Jogadas&#91;4] = Jogadas&#91;7]) and (Jogadas&#91;7] = xValorConsiderado)) or\n         ((Jogadas&#91;2] = Jogadas&#91;5]) and (Jogadas&#91;5] = Jogadas&#91;8]) and (Jogadas&#91;8] = xValorConsiderado)) or\n         \/\/ Diagonal\n         ((Jogadas&#91;0] = Jogadas&#91;4]) and (Jogadas&#91;4] = Jogadas&#91;8]) and (Jogadas&#91;8] = xValorConsiderado)) or\n         ((Jogadas&#91;2] = Jogadas&#91;4]) and (Jogadas&#91;4] = Jogadas&#91;6]) and (Jogadas&#91;6] = xValorConsiderado)) then\n        begin\n          ShowMessage(Mensagem);\n          FimJogo:= True;\n        end\n      else\n        begin\n          if xJogada = 9 then\n            begin\n              ShowMessage('Empate');\n              FimJogo:= True;\n            end;\n        end;\n    end;\nend;\n\nend.\n<\/code><\/pre>\n<p>Views: 1<\/p>","protected":false},"excerpt":{"rendered":"<p>Abaixo um exemplo de Delphi para se criar um Jogo da Velha. Este c\u00f3digo abaixo n\u00e3o tem exatamente algum tipo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":141,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[49],"tags":[47,43],"class_list":["post-139","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacao","tag-delphi","tag-programacao"],"_links":{"self":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts\/139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=139"}],"version-history":[{"count":0,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/posts\/139\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=\/wp\/v2\/media\/141"}],"wp:attachment":[{"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=139"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.wagnersalvi.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}