Ir ao conteúdo
  • Cadastre-se

amissadai

Membro Pleno
  • Posts

    22
  • Cadastrado em

  • Última visita

Reputação

2
  1. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace JogoDaVelha { // JogoDaVelha é uma classe abstrata, pois existem tabuleiros, 3x3, 4x4 e 5x5. public abstract class JogoDaVelha { //Atributos private int[,] MatrizDoJogoDaVelha { set; get; } private char[,] MatrizCopia { set; get; } //Métodos Abstratos public abstract int verificarLinhas(); public abstract int verificarColunas(); public abstract int verificaDiagonalPrincipal(); public abstract int verificaDiagonalSecundaria(); public abstract char[,] matrizRecebeEscolha_X_ou_O_do_usuario(Player player); public abstract void imprimeTabuleiro(); } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace JogoDaVelha { //Tabuleiro 3X3 class Tabuleiro3X3 : JogoDaVelha { private int[,] matrizDoJogoDaVelha; private char[,] matrizCopia; public Tabuleiro3X3() { this.MatrizDoJogoDaVelha = new int[3, 3] { { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 } }; this.MatrizCopia = new char[3, 3] { { 'X', 'X', 'X'}, { 'X', 'X', 'X'}, { 'X', 'X', 'X'} }; } public int[,] MatrizDoJogoDaVelha { set { this.matrizDoJogoDaVelha = value; } get { return this.matrizDoJogoDaVelha; } } public char[,] MatrizCopia { set { this.matrizCopia = value; } get { return this.matrizCopia; } } // Verifica linhas do jogo em X e em O public override int verificarLinhas() { for (int i = 0; i < 3; i++) { if ((this.MatrizDoJogoDaVelha[i, 0] + this.MatrizDoJogoDaVelha[i, 1] + this.MatrizDoJogoDaVelha[i, 2] == -3)) return -3; else { if ((this.MatrizDoJogoDaVelha[i, 0] + this.MatrizDoJogoDaVelha[i, 1] + this.MatrizDoJogoDaVelha[i, 2] == 3)) return 3; } } return 0; } //Verifica colunas do jogo em X e em O public override int verificarColunas() { for(int j = 0; j < 3; j++) { if ((this.MatrizDoJogoDaVelha[0, j] + this.MatrizDoJogoDaVelha[1, j] + this.MatrizDoJogoDaVelha[2, j] == -3)) return -3; else { if ((this.MatrizDoJogoDaVelha[0, j] + this.MatrizDoJogoDaVelha[1, j] + this.MatrizDoJogoDaVelha[2, j] == 3)) return 3; } } return 0; } //Verifica diagonal principal em X e em O public override int verificaDiagonalPrincipal() { if ((this.MatrizDoJogoDaVelha[0, 0] + this.MatrizDoJogoDaVelha[1, 1] + this.MatrizDoJogoDaVelha[2, 2] == -3)) return -3; else { if ((this.MatrizDoJogoDaVelha[0, 0] + this.MatrizDoJogoDaVelha[1, 1] + this.MatrizDoJogoDaVelha[2, 2] == 3)) return 3; } return 0; } //Verifica diagonal secundária em X e em O public override int verificaDiagonalSecundaria() { if ((this.MatrizDoJogoDaVelha[0, 2] + this.MatrizDoJogoDaVelha[1, 1] + this.MatrizDoJogoDaVelha[2, 0] == -3)) return -3; else { if ((this.MatrizDoJogoDaVelha[0, 2] + this.MatrizDoJogoDaVelha[1, 1] + this.MatrizDoJogoDaVelha[2, 0] == 3)) return 3; } return 0; } //O método recebe duas matrizes, onde uma vai receber valores -1 e 1 e a outra recebe X ou O public override char[,] matrizRecebeEscolha_X_ou_O_do_usuario(Player player) { this.MatrizDoJogoDaVelha[player.PosLinha, player.PosColuna] = player.Valor; if (player.Valor == 1) this.MatrizCopia[player.PosLinha, player.PosColuna] = 'O'; else { if (player.Valor == -1) { this.MatrizCopia[player.PosLinha, player.PosColuna] = 'X'; } } return this.MatrizCopia; } //Método que imprime a grade. Falta terminar!! public override void imprimeTabuleiro() { Console.Write(" 0 1 2"); Console.WriteLine(""); for (int i=0; i<3; i++) { for (int j = 0; j < 3; j++) { Console.Write(i+" "+this.MatrizCopia[i, j]); } Console.WriteLine(""); Console.WriteLine(" -----------"); } } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace JogoDaVelha { public class Player { private int posLinha; private int posColuna; private int valor; public Player() { this.PosLinha = 0; this.PosColuna = 0; this.Valor = 0; } public Player(int linha, int coluna, int val) { this.PosLinha = linha; this.PosColuna = coluna; this.Valor = val; } public int PosLinha { set { this.posLinha = value; } get { return this.posLinha; } } public int PosColuna { set { this.posColuna = value; } get { return this.posColuna; } } public int Valor { set { this.valor = value; } get { return this.valor; } } } } Boa noite pessoal, estou aprendendo orientação à objetos em c#, então para treinar resolvi fazer esse jogo da velha. Não terminei ainda, mas está funcionando e ainda falta várias funcionalidades. Minha dúvida é se esse é o jeito certo de PROGRAMAR ORIENTAÇÃO À OBJETOS ? e enquanto a esse método public override char[,] matrizRecebeEscolha_X_ou_O_do_usuario(Player player) é correto passar objeto como parâmetro dessa forma ? vocês teria alguma dica para iniciante em ORIENTAÇÃO À OBJETOS ? desde já fico grato.
  2. estou com um problema no meu jogo e já tentei encontrar o erro mais não acho. O meu tabuleiro gera no máximo 39 números respeitando as regras do sudoku. O problema que eu gostaria que vcs me ajudasse é que, quando eu rodo os 39 números e coloco eles em um solver(programa que resolve o jogo, pode ser encontrado na net), recebo a mensagem dizendo que o tabuleiro não tem solução. Pra 8 números por exemplo, tem. Meu código : #include <stdio.h> #include <stdlib.h> #include <time.h>  #define TAM 9 /* / Função que verifica se as linhas do jogo não tem elementos repetidos. / A função fica na linha que o usuário digitou e percorre toda coluna do / tabuleiro até achar os elementos repetidos. Quando achar esses elementos, conta quantos tem. */ int verificaLinha(int tab[TAM][TAM], int verificaLinha, int valor){ int linha = verificaLinha, coluna, conta_linha = 0; while(verificaLinha < linha + 1){ coluna = 0; while(coluna < TAM){ if(tab[verificaLinha][coluna] == valor){ conta_linha = conta_linha + 1; } coluna = coluna + 1; } verificaLinha = verificaLinha + 1; } return conta_linha; } /* Função que verifica se as colunas do jogo não tem elementos repetidos. A função fica na coluna que o usuário digitou e percorre todas as linhas do tabuleiro até achar os elemento repetidos. Quando achar esses elementos, conta quantos tem. */ int verificaColuna(int tab[TAM][TAM], int verificaColuna, int valor) { int linha = 0, coluna, conta_coluna = 0; while(linha < TAM){ coluna = verificaColuna; while(coluna < verificaColuna + 1){ if(tab[linha][verificaColuna] == valor){ conta_coluna = conta_coluna + 1; } coluna = coluna + 1; } linha = linha + 1; } return conta_coluna; } /* Função que verifica se os blocos (MATRIZ 3X3) do jogo não tem elementos repetidos. A função pega as linhas digitada pelo usuário divide por 3, onde temos a parte da divisão inteira. Depois multiplicamos essa parte inteira por 3. Daí é só percorrer a linha com um while até esta mesma linha + 2. De modo análogo podemos fazer para as colunas. */ int blocoSudoku(int tabuleiro[TAM][TAM], int linha, int coluna, int valor){ int conta_dentro_do_bloco=0, perc_linha, perc_coluna, aux_linha, aux_coluna; perc_linha = (linha / 3) * 3; aux_linha = perc_linha + 2; while(perc_linha <= aux_linha){ perc_coluna = (coluna / 3) * 3; aux_coluna = perc_coluna + 2; while(perc_coluna <= aux_coluna){ if(tabuleiro[perc_linha][perc_coluna] == valor){ conta_dentro_do_bloco = conta_dentro_do_bloco + 1; } perc_coluna = perc_coluna + 1; } perc_linha = perc_linha + 1; } return conta_dentro_do_bloco; } void preenche_matriz(int tabuleiro[TAM][TAM]) { //PREENCHE TODA MATRIZ COM ZEROS. int linha = 0, coluna; while(linha < TAM) { coluna = 0; while(coluna < TAM){ tabuleiro[linha][coluna] = 0; coluna = coluna + 1; } linha = linha + 1; } } void gerarAleatorios(int tabuleiro[][TAM]){ int aleatorio, linhaHorizontal, linhaVertical; int incremento = 0; while(incremento < 39){ srand(time(NULL)); aleatorio = rand()%9+1; linhaHorizontal = rand()%9; linhaVertical = rand()%9; while(tabuleiro[linhaHorizontal][linhaVertical] != 0){ linhaHorizontal = rand()%9; linhaVertical = rand()%9; } while((blocoSudoku(tabuleiro, linhaHorizontal, linhaVertical, aleatorio) || verificaColuna(tabuleiro, linhaVertical, aleatorio) || verificaLinha(tabuleiro, linhaHorizontal, aleatorio)) != 0){ aleatorio = rand()%9+1; } tabuleiro[linhaHorizontal][linhaVertical] = aleatorio; incremento = incremento + 1; } } void imprime(int tabuleiro[TAM][TAM]){ //IMPRIMI O TABULEIRO NA TELA DO USUARIO. int linha = 0, coluna; while(linha < TAM){ if((linha % 3) == 0){ printf("-----------------------------------------------|\n"); } coluna = 0; while(coluna < TAM){ printf(" %d ",tabuleiro[linha][coluna]); coluna = coluna + 1; if((coluna % 3) == 0){ printf("|"); } } printf("\n"); linha = linha + 1; } printf("------------------------------------------------\n"); } int main(){ int tabuleiro[TAM][TAM]; // Faz a chamada das funções. preenche_matriz(tabuleiro); gerarAleatorios(tabuleiro); imprime(tabuleiro); return 0 ; }
  3. estou com um problema no meu jogo e já tentei encontrar o erro mais não acho. O meu tabuleiro gera no máximo 39 números respeitando as regras do sudoku .Se eu colocar mais de 39 números ele não roda. O problema que eu gostaria que vcs me ajudasse é que, quando eu rodo os 39 números e coloco eles em um solver, recebo a mensagem dizendo que o tabuleiro não tem solução. Pra 8 números por exemplo, tem. Meu código : #include <stdio.h> #include <stdlib.h> #include <time.h> #define TAM 9 /* / Função que verifica se as linhas do jogo não tem elementos repetidos. / A função fica na linha que o usuário digitou e percorre toda coluna do / tabuleiro até achar os elementos repetidos. Quando achar esses elementos, conta quantos tem. */ int verificaLinha(int tab[TAM][TAM], int verificaLinha, int valor){ int linha = verificaLinha, coluna, conta_linha = 0; while(verificaLinha < linha + 1){ coluna = 0; while(coluna < TAM){ if(tab[verificaLinha][coluna] == valor){ conta_linha = conta_linha + 1; } coluna = coluna + 1; } verificaLinha = verificaLinha + 1; } return conta_linha; } /* Função que verifica se as colunas do jogo não tem elementos repetidos. A função fica na coluna que o usuário digitou e percorre todas as linhas do tabuleiro até achar os elemento repetidos. Quando achar esses elementos, conta quantos tem. */ int verificaColuna(int tab[TAM][TAM], int verificaColuna, int valor) { int linha = 0, coluna, conta_coluna = 0; while(linha < TAM){ coluna = verificaColuna; while(coluna < verificaColuna + 1){ if(tab[linha][verificaColuna] == valor){ conta_coluna = conta_coluna + 1; } coluna = coluna + 1; } linha = linha + 1; } return conta_coluna; } /* Função que verifica se os blocos (MATRIZ 3X3) do jogo não tem elementos repetidos. A função pega as linhas digitada pelo usuário divide por 3, onde temos a parte da divisão inteira. Depois multiplicamos essa parte inteira por 3. Daí é só percorrer a linha com um while até esta mesma linha + 2. De modo análogo podemos fazer para as colunas. */ int blocoSudoku(int tabuleiro[TAM][TAM], int linha, int coluna, int valor){ int conta_dentro_do_bloco=0, perc_linha, perc_coluna, aux_linha, aux_coluna; perc_linha = (linha / 3) * 3; aux_linha = perc_linha + 2; while(perc_linha <= aux_linha){ perc_coluna = (coluna / 3) * 3; aux_coluna = perc_coluna + 2; while(perc_coluna <= aux_coluna){ if(tabuleiro[perc_linha][perc_coluna] == valor){ conta_dentro_do_bloco = conta_dentro_do_bloco + 1; } perc_coluna = perc_coluna + 1; } perc_linha = perc_linha + 1; } return conta_dentro_do_bloco; } void preenche_matriz(int tabuleiro[TAM][TAM]) { //PREENCHE TODA MATRIZ COM ZEROS. int linha = 0, coluna; while(linha < TAM) { coluna = 0; while(coluna < TAM){ tabuleiro[linha][coluna] = 0; coluna = coluna + 1; } linha = linha + 1; } } void gerarAleatorios(int tabuleiro[][TAM]){ int aleatorio, linhaHorizontal, linhaVertical; int incremento = 0; while(incremento < 39){ srand(time(NULL)); aleatorio = rand()%9+1; linhaHorizontal = rand()%9; linhaVertical = rand()%9; while(tabuleiro[linhaHorizontal][linhaVertical] != 0){ linhaHorizontal = rand()%9; linhaVertical = rand()%9; } while((blocoSudoku(tabuleiro, linhaHorizontal, linhaVertical, aleatorio) || verificaColuna(tabuleiro, linhaVertical, aleatorio) || verificaLinha(tabuleiro, linhaHorizontal, aleatorio)) != 0){ aleatorio = rand()%9+1; } tabuleiro[linhaHorizontal][linhaVertical] = aleatorio; incremento = incremento + 1; } } void imprime(int tabuleiro[TAM][TAM]){ //IMPRIMI O TABULEIRO NA TELA DO USUARIO. int linha = 0, coluna; while(linha < TAM){ if((linha % 3) == 0){ printf("-----------------------------------------------|\n"); } coluna = 0; while(coluna < TAM){ printf(" %d ",tabuleiro[linha][coluna]); coluna = coluna + 1; if((coluna % 3) == 0){ printf("|"); } } printf("\n"); linha = linha + 1; } printf("------------------------------------------------\n"); } int main(){ int tabuleiro[TAM][TAM]; // Faz a chamada das funções. preenche_matriz(tabuleiro); gerarAleatorios(tabuleiro); imprime(tabuleiro); return 0 ; }
  4. CALCULO DE IMC USANDO funções. Meu problema é que eu não consigo chamar essas funções na função principal. /*Programa que calcula IMC*/ #include<stdio.h> #include<conio.h> int main(void) { float peso; float altura; printf("Digite seu peso.: "); scanf("%f",&peso); printf("Digite sua altura.: "); scanf("%f",&altura); getch(); } //Funçao que faz a condiçao do IMC. float IMC(float imc){ //Chamada da funçao Calcular IMC. float calculaIMC(float p, float a); if(imc<18,5){ printf("Abaixo do peso."); return imc; } else if((imc>=18,5)&&(imc<=25)){ printf("Peso normal."); return imc; } else if((imc>25)&&(imc<=30)){ printf("Acima do peso"); return imc; } else{ printf("Obeso."); return imc; } } //Funçao que calcula o IMC float calculaIMC(float p, float a){ float imc = p/(a*a); return imc; }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...