Advertisement
FelipeNeto2

TRABALHO

Jun 26th, 2018
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.40 KB | None | 0 0
  1. // Algoritmo: Jogo dos pontinhos
  2. // Função: Jogo eletrônico baseado no "jogo dos pontinhos"
  3. // Autores: Beatriz Dionizio, Fernando Ângelo, Joana Cândida, Marcos Alexandre e Vinícius Seabra
  4. // Data: 25/06/2018
  5. programa
  6. {
  7. // Bibliotecas
  8. inclua biblioteca Util --> ut
  9. inclua biblioteca Texto --> txt
  10. inclua biblioteca Tipos --> tp
  11. inclua biblioteca Arquivos --> arq
  12.  
  13. // Declaração de variáveis
  14. inteiro J1 = 0, J2 = 0 // Valor do placar de cada jogador
  15. cadeia p1 // O valor que será recebido para indicar a posição de preenchimento de cada rodada
  16. inteiro lin, col // Valores que serão fornecidos pelo usuário p/ as jogadas.
  17. logico flag = falso // Flag de controle.
  18. logico bandeira = verdadeiro // Outra flag de controle
  19. cadeia nome = "" // Nome do jogador
  20. caracter inicial = ' ' // Inicial do jogador
  21. inteiro endereco // Endereço p/ salvar o arquivo
  22. logico continuar = verdadeiro // Flag p/ continuar jogo ou não.
  23.  
  24. // Declaração da variável p/ armazenar valores no vetor
  25. inteiro cont = 0
  26.  
  27. // Declaração de constantes
  28. const inteiro TAM = 9 // Tamanho da matriz (Tabuleiro)
  29. const inteiro T = 100 // Tamanho dos vetores
  30.  
  31. // Declaração de matrizes
  32. cadeia mat[TAM][TAM]
  33.  
  34. // Declaração de vetores auxiliares
  35. cadeia vet[T], vetor[T]
  36.  
  37. // Função inicial
  38. funcao inicio(){
  39. inteiro opcao
  40.  
  41. // Apresentação do programa
  42. escreva("-- JOGO DOS PONTINHOS --\n")
  43.  
  44. // Chamar função Interacao
  45. Interacao(nome)
  46.  
  47. se(arq.arquivo_existe(nome+".txt")){
  48. // Tela inicial do jogo
  49. escreva("#############################################")
  50. escreva("\n## Jogo dos pontinhos ##")
  51. escreva("\n#############################################")
  52. escreva("\n## ##")
  53. escreva("\n## 1) Novo jogo ##")
  54. escreva("\n## 2) Continuar ##")
  55. escreva("\n## 0) Sair ##")
  56. escreva("\n## ##")
  57. escreva("\n#############################################")
  58. escreva("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>> Escolha opção: ")
  59. leia(opcao)
  60. }senao{
  61. // Tela inicial do jogo
  62. escreva("#############################################")
  63. escreva("\n## Jogo dos pontinhos ##")
  64. escreva("\n#############################################")
  65. escreva("\n## ##")
  66. escreva("\n## 1) Novo jogo ##")
  67. escreva("\n## ##")
  68. escreva("\n## 0) Sair ##")
  69. escreva("\n## ##")
  70. escreva("\n#############################################")
  71. escreva("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>> Escolha opção: ")
  72. leia(opcao)
  73. }
  74.  
  75. se(opcao == 1){
  76. comecar() //Iniciar o jogo
  77. }senao se(opcao == 0){
  78.  
  79. }senao se(opcao == 2){
  80. load() // Carregar jogo
  81. }senao{
  82.  
  83. }
  84. }
  85.  
  86. // Função principal
  87. funcao comecar()
  88. {
  89.  
  90. se(bandeira == verdadeiro){ // Decisão do usuário
  91.  
  92. // Chamar função Explicacao
  93. Explicacao(nome)
  94.  
  95. }
  96.  
  97. // Variável para receber inicial do usuário
  98. nome = txt.caixa_alta(nome)
  99. inicial = txt.obter_caracter(nome, 0)
  100.  
  101. // Preencher a matriz
  102. preencherMatriz(mat)
  103.  
  104. // Chamar função jogo
  105. jogo()
  106.  
  107. }
  108.  
  109. // Função Interacao
  110. funcao Interacao(cadeia & n)
  111. {
  112. // Recebe o nome do usuário
  113. escreva("\n> Primeiramente, digite seu nome: ")
  114. leia(nome)
  115. }
  116.  
  117. // Função explicacao
  118. // Explica ao usuário como o jogo funciona
  119. funcao Explicacao(cadeia & n)
  120. {
  121. // Declaração de variável
  122. caracter pergunta // Recebe a resposta (sim ou não) para o caso do usuário desejar ver as regras do jogo
  123.  
  124. // Explicando o jogo
  125. escreva("\n> Olá, ",nome,"! Vamos jogar?!\n")
  126. escreva("\n MENU:\n> Deseja ler as regras do jogo? (S para 'sim' ou N para 'não') \n")
  127. leia(pergunta)
  128. pergunta = tp.cadeia_para_caracter(txt.caixa_alta(pergunta+""))
  129. se(pergunta == 'S')
  130. {
  131. limpa()
  132. escreva("> Objetivos: Formar um quadrado ligando 4 pontos.\n")
  133. escreva("> Controles: Entre com um número de dois dígitos. \n")
  134. escreva("O primeiro equivale a linha da determinada posição, e o segundo equivale a coluna.\n")
  135. escreva("> Exemplo: 81 -- Linha 8, Coluna 1.")
  136.  
  137. // Tempo para o usuário olhar a explicação do jogo
  138. ut.aguarde(10000)
  139. limpa()
  140. }senao{
  141. bandeira = falso
  142. }
  143. }
  144.  
  145. // Função p/ preencher inicialmente a matriz
  146. funcao preencherMatriz(cadeia & matriz[][]){
  147. // Laço para preencher a matriz
  148. para(inteiro i = 0; i<TAM; i++){
  149. para(inteiro j = 0; j<TAM; j++){
  150. se((i%2 == 0) e (j%2 == 0)){
  151. matriz[i][j] = "+" // Caracter que indica os pontos
  152. }senao{
  153. se((i%2==1)e(j%2 == 0)){
  154. matriz[i][j] = " " // Caracter escolhido para organizar visualmente a matriz
  155. }senao se((i%2 == 1)e(j%2 == 1)){
  156. matriz[i][j] = "." // Caracter que indica o centro de um possivel quadrado
  157. }senao{
  158. matriz[i][j] = "" // Caracter que representa os locais que podem ser jogados
  159. }
  160. }
  161. }
  162. }
  163. }
  164.  
  165. // Função p/ escrever matriz
  166. funcao escreverMatriz(cadeia matriz[][]){
  167. para(inteiro i = 0; i<TAM; i++){
  168. // Escreve a primeira linha de números antes
  169. se(i == 0){
  170. escreva(" ")
  171. para(inteiro k = 1; k<=TAM; k++){
  172. escreva(k +" ")
  173. }
  174. escreva("\n")
  175. }
  176.  
  177. // Escreve a coluna de números
  178. escreva(i+1+" ")
  179. // Escreve matriz
  180. para(inteiro j = 0; j<TAM; j++){
  181. cadeia item = mat[i][j]
  182. se((item == "")ou(item == ".")){
  183. escreva(" ")
  184. }senao{
  185. escreva(item)
  186. }
  187. }
  188.  
  189. // Quebra de linha
  190. escreva("\n")
  191. }
  192. }
  193. // Função escreverPlacar
  194. // Imprime na tela o placar da partida
  195. funcao escreverPlacar(){
  196. escreva("\n\n>>>>>>>>>>>>>>>> Placar <<<<<<<<<<<<<<<<\n")
  197. escreva("Jogador Humano - ",J1," x ",J2," - Jogador Máquina\n")
  198. }
  199. // Função apresentacao
  200. // Imprime na tela a apresentação do jogo
  201. funcao apresentacao(){
  202. escreva("\n ########################\n")
  203. escreva(" ## Jogo dos pontinhos ##\n")
  204. escreva(" ########################\n")
  205. escreva("\n")
  206. }
  207. // Função jogadaUsuario
  208. //
  209. funcao jogadaUsuario(){
  210.  
  211. escreva("-- Jogador Humano --\n")
  212. escreva("Entre com uma posição (0 para salvar e sair): ")
  213. leia(p1) // Receber a posição desejada
  214.  
  215. // Verifica se a posição inserida é válida
  216. se(ut.numero_elementos(vet)!=0){
  217. para(inteiro b = 0; b<cont; b++){
  218. se(vet[b] == p1){
  219. // Elemento encontrado
  220. flag = verdadeiro
  221. pare
  222. }
  223. }
  224. }
  225.  
  226. se(flag == falso){ // Caso o elemento não tenha sido encontrado
  227.  
  228. se(p1!="0"){ // Caso o usuário não tenha pedido p/ sair
  229. se(txt.numero_caracteres(p1) != 2){
  230. // Caso o usuário tenha informado uma cadeia com mais de 2 dígitos
  231. limpa()
  232. escreva("Número inválido.\n\n")
  233. ut.aguarde(2000)
  234. jogadaUsuario()
  235.  
  236. }senao{
  237. // Elemento não encontrado
  238. lin = tp.cadeia_para_inteiro(txt.obter_caracter(p1, 0)+"", 10) // Extrai a linha que o usuário escolheu
  239. col = tp.cadeia_para_inteiro(txt.obter_caracter(p1, 1)+"", 10) // Extrai a coluna que o usuário escolheu
  240.  
  241. // Validação da linha e da coluna
  242. se((lin!=0)e(col!=0)){
  243. se(lin%2 == 1){
  244. se(col%2 == 0){ // Caso a jogada seja na horizontal
  245. mat[lin-1][col-1] = "---"
  246. }senao{
  247. // Posição inválida
  248. limpa()
  249. escreva("Essa posição é inválida!\n")
  250. ut.aguarde(2000)
  251. limpa()
  252. jogadaUsuario()
  253. }
  254. }senao{
  255. se(col%2 == 1){ // Caso a jogada seja na vertical
  256. mat[lin-1][col-1] = "|"
  257. }senao{
  258. // Posição inválida
  259. limpa()
  260. escreva("Essa posição é inválida!\n")
  261. ut.aguarde(2000)
  262. limpa()
  263. jogadaUsuario()
  264. }
  265. }
  266. }senao{
  267. // Posição inválida
  268. limpa()
  269. escreva("Essa posição é inválida!\n")
  270. ut.aguarde(2000)
  271. limpa()
  272. escreverMatriz(mat)
  273. jogadaUsuario()
  274. }
  275. }
  276. }senao{
  277. // Função p/ salvar o jogo atual
  278. salvar()
  279. }
  280. }senao{ // Caso o elemento tenha sido encontrado
  281. escreva("Posição inválida.\n")
  282. escreva("\n")
  283. flag = falso
  284. jogadaUsuario()
  285. }
  286.  
  287. // Atualiza o vetor com as jogadas
  288. atualizarVetor()
  289. atualizarPontuacao(verdadeiro)
  290. }
  291.  
  292. // Jogada da máquina
  293. funcao jogadaMaquina(){
  294. //p1 = ""
  295. // Armazena em um vetor os valores possíveis de serem escolhidos
  296. inteiro c = 0, linha, coluna
  297. para(inteiro i = 0; i<TAM; i++){
  298. para(inteiro j = 0; j<TAM; j++){
  299. se((mat[i][j] == "")ou(mat[i][j] == " ")){ // Caso a posição seja válida
  300. // Concatena cadeias p/ guardar o resultado.
  301. linha = i+1
  302. coluna = j+1
  303. vetor[c] = linha+""
  304. vetor[c] += coluna
  305.  
  306. // Variável p/ controlar a quantidade de opções
  307. c++
  308. }
  309. }
  310. }
  311.  
  312. se(c>0){ // Se existe alguma jogada possível
  313. p1 = ""
  314. inteiro l, co // Variáveis correspondentes a linha(l) e a coluna(co) da posição
  315. para(inteiro i = 0; i<TAM; i++){ // Laço para verificação da matriz
  316. para(inteiro j = 0; j<TAM; j++){
  317. se(mat[i][j] == "."){// P/ cada centro de quadrado da matriz verefica se ele está cercado por...
  318. se(mat[i-1][j]!=""){ //...traço superior...
  319. se(mat[i+1][j]!=""){ //...traço inferior...
  320. se(mat[i][j-1]!=" "){ //...traço da esquerda...
  321. se(mat[i][j+1] == " "){ //e não tem o traço da direita
  322. // Preenche com o traço da direita
  323. l = i+1 //linha
  324. co = j+2 //coluna
  325. p1 = l+"" //linha + concatenação
  326. p1 += co
  327. pare
  328. pare
  329. }
  330. }senao se(mat[i][j+1]!=" "){//...Ou (caso não tenha o traço da esquerda) se tem o traço da direita
  331. // Em caso afirmativo, preenche com o traço da esquerda
  332. l = i+1 //linha
  333. co = j //coluna
  334. p1 = l+"" //linha + concatenação
  335. p1 += co
  336. pare
  337. pare
  338. }
  339. }senao se((mat[i][j-1]!=" ")e(mat[i][j+1]!=" ")){//...Ou (caso sem o traço inferior) se tem os traços laterais
  340. //Em caso afirmativo, preenche com o traço inferior
  341. l = i+2 //linha
  342. co = j+1 //coluna
  343. p1 = l+"" //linha + concatenação
  344. p1 += co
  345. pare
  346. pare
  347. }
  348. }senao se((mat[i+1][j]!="")e(mat[i][j-1]!=" ")e(mat[i][j+1]!=" ")){//Caso que não tem o traço superior e tem todos os outros
  349. //Preenche com o traço superior
  350. l = i //linha
  351. co = j+1 //coluna
  352. p1 = l+"" //linha + concatenação
  353. p1 += co
  354. pare
  355. pare
  356. }
  357. }
  358. }
  359. }
  360.  
  361. se(p1 == ""){
  362. inteiro valor = ut.sorteia(0, c) // Escolhe um valor aleatório p/ posição do elemento no vetor
  363. p1 = vetor[valor] // Armazena a jogada da posição aleatória
  364. }
  365. escreva("-- Jogador Computador -- Jogada na posição:", p1,"\n")
  366.  
  367. lin = tp.cadeia_para_inteiro(txt.obter_caracter(p1, 0)+"", 10)-1 // Extrai a linha
  368. col = tp.cadeia_para_inteiro(txt.obter_caracter(p1, 1)+"", 10)-1 // Extrai a coluna
  369.  
  370. // Escrever jogada na matriz
  371. se(col%2 == 1){ // Caso a jogada seja na horizontal
  372. mat[lin][col] = "~~~"
  373. }senao{ // Caso a jogada seja na vertical
  374. mat[lin][col] = "!"
  375. }
  376.  
  377. // Atualiza o vetor com as jogadas
  378. atualizarVetor()
  379.  
  380. // Atualiza pontuação do jogo
  381. atualizarPontuacao(falso)
  382. }
  383. }
  384.  
  385. //Função p/ atualizar vetor
  386. funcao atualizarVetor(){
  387. cont = 0
  388. inteiro l, c
  389.  
  390. // Para cada elemento da matriz...
  391. para(inteiro i = 0; i<TAM; i++){
  392. para(inteiro j = 0; j<TAM; j++){
  393. se((mat[i][j]=="---")ou(mat[i][j] == "~~~")ou(mat[i][j] == "|")ou(mat[i][j] == "!")){ // Testa se ele já foi uma jogada
  394. // Concatena os valores referentes a jogada p/ armazenar no vetor
  395. l = i+1
  396. c = j+1
  397. vet[cont] = l+""
  398. vet[cont] += c
  399.  
  400. //Variável de controle de tamanho do vetor
  401. cont++
  402. }
  403.  
  404. }
  405. }
  406. }
  407.  
  408. // Função p/ atualizar pontuação
  409. funcao atualizarPontuacao(logico humano){
  410. // Variável p/ controle de nova jogada por parte de quem pontuou
  411. logico jogarNovamente = falso
  412.  
  413. // Para cada item da matriz...
  414. para(inteiro i = 0; i<TAM; i++){
  415. para(inteiro j = 0; j<TAM; j++){
  416. // Testa se é o centro de um "quadrado"
  417. se(mat[i][j] == "."){
  418. // A cada centro encontrado, verifica se as suas margens estão "preenchidas"
  419. se((mat[i-1][j]!="")e(mat[i+1][j]!="")e(mat[i][j-1]!=" ")e(mat[i][j+1]!=" ")){
  420. se(humano == verdadeiro){ // humano: variável de diferenciação entre usuário e máquina
  421. //Pontua o jogador
  422. J1++
  423.  
  424. // Escreve a inicial do jogador no centro
  425. mat[i][j] = " "+inicial+" "
  426.  
  427. // Caso o jogo não tenha acabado, permite ao jogador mais uma jogada
  428. se(J1+J2<16){
  429. jogarNovamente = verdadeiro
  430. }
  431. }senao{
  432. // Pontua a máquina
  433. J2++
  434.  
  435. // Escreve um demarcador p/ indicar pontuação
  436. mat[i][j] = "PC "
  437.  
  438. // Permite que a máquina faça outra jogada
  439. jogarNovamente = verdadeiro
  440. }
  441. }
  442. }
  443. }
  444. }
  445.  
  446. se(jogarNovamente == verdadeiro){ // Nova jogada do pontuador
  447. se(humano == verdadeiro){
  448. limpa()
  449. // Caso em que o usuário pontuou
  450. escreverMatriz(mat)
  451. jogadaUsuario()
  452. }senao{
  453. // Caso em que a máquina pontuou
  454. jogadaMaquina()
  455. }
  456. }
  457. }
  458.  
  459. // Função p/ salvar jogo
  460. funcao salvar(){
  461. endereco = arq.abrir_arquivo(nome+".txt", arq.MODO_ESCRITA) // Abrir novo arquivo
  462.  
  463. arq.escrever_linha("> Nome do jogador:", endereco) // Linha p/ organização do arquivo
  464.  
  465. arq.escrever_linha(nome, endereco) // Salvar nome do jogador
  466.  
  467. arq.escrever_linha("> Inicial do jogador:", endereco) // Linha p/ organizar o arquivo
  468.  
  469. arq.escrever_linha(inicial+"", endereco) // Salvar inicial do jogador
  470.  
  471. arq.escrever_linha("> Pontuação do jogador:", endereco) // Linha p/ organização do arquivo
  472.  
  473. arq.escrever_linha(J1+"", endereco) // Salva pontuação do jogador
  474.  
  475. arq.escrever_linha("> Pontuação da máquina:", endereco) // Linha p/ organização do arquivo
  476.  
  477. arq.escrever_linha(J2+"", endereco) // Salva pontuação da máquina
  478.  
  479. arq.escrever_linha("> Tabuleiro:", endereco) // Linha p/ organização do arquivo
  480.  
  481. // Para cada elemento da matriz...
  482. para(inteiro i = 0; i<TAM; i++){
  483. para(inteiro j = 0; j<TAM; j++){
  484. arq.escrever_linha(mat[i][j], endereco) // ...Salvar
  485. }
  486. }
  487. arq.fechar_arquivo(endereco) // Fechar arquivo
  488.  
  489. continuar = falso // Finalizar jogo
  490. }
  491.  
  492. // Função p/ ler jogo
  493. funcao load(){
  494. endereco = arq.abrir_arquivo(nome+".txt", arq.MODO_LEITURA) // Abrir arquivo salvo
  495.  
  496. arq.ler_linha(endereco) // Pular linha de organização
  497.  
  498. nome = arq.ler_linha(endereco) // Ler nome do usuário
  499.  
  500. arq.ler_linha(endereco) // Pular linha
  501.  
  502. inicial = tp.cadeia_para_caracter(arq.ler_linha(endereco)) // Obter inicial do jogador
  503.  
  504. arq.ler_linha(endereco) // Pular linha de organização
  505.  
  506. J1 = tp.cadeia_para_inteiro(arq.ler_linha(endereco), 10) // Lê pontuação do usuário
  507.  
  508. arq.ler_linha(endereco) // Pular linha de organização
  509.  
  510. J2 = tp.cadeia_para_inteiro(arq.ler_linha(endereco), 10) // Lê pontuação da máquina
  511.  
  512. arq.ler_linha(endereco) // Pular linha de organização
  513.  
  514. // Ler matriz salva
  515. para(inteiro i = 0; i<TAM; i++){
  516. para(inteiro j = 0; j<TAM; j++){
  517. mat[i][j] = arq.ler_linha(endereco) // Ler cada caracter da matriz salva
  518. }
  519. }
  520.  
  521. arq.fechar_arquivo(endereco)
  522.  
  523. jogo()
  524. }
  525.  
  526. funcao jogo(){
  527. faca{
  528. // Limpar tela
  529. limpa()
  530.  
  531. // Apresentação
  532. apresentacao()
  533.  
  534. // Escrever a matriz
  535. escreverMatriz(mat)
  536.  
  537. // Escrever placar
  538. escreverPlacar()
  539.  
  540. // Nova jogada do usuário
  541. jogadaUsuario()
  542.  
  543. se(continuar == verdadeiro){
  544. // Vez do pc
  545. jogadaMaquina()
  546. }senao{
  547. J1 = 16
  548. }
  549.  
  550. }enquanto(J1+J2<16) // Final do jogo
  551.  
  552. se(continuar == verdadeiro){
  553. // Resultado final
  554. se(J1>J2){
  555. escreva("\nParabéns ,", nome,", você venceu! :D\n ")
  556. }senao se(J2>J1){
  557. escreva("\nQue pena ,", nome,"! Você perdeu. :(\n ")
  558. }senao{
  559. escreva("\nEmpate! :/ \n")
  560. }
  561. }
  562. }
  563. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement