• Martes 5 de Noviembre de 2024, 13:46

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Murciego

Páginas: [1]
1
C/C++ / Algoritmo recursivo para nº combinatorios
« en: Lunes 10 de Febrero de 2003, 23:40 »
Tabién lo puedes hacer teniendo en cuenta que un numero convinatorio es la suma de dos anteriores (recordad el triangulo de Pascal).

Asi saldria un bonito algoritmo recursivo con dos llamadas

2
C/C++ / Re: JUEGO DEL "TETRIS" en C++
« en: Sábado 11 de Enero de 2003, 23:40 »
Hola

Yo empece ha hacer un tetris, un poco modificado, pues la idea es que se pudiera disparar a las piezas y que le rompieran trozos, y que estrozos le fueran al enemido.

Esta sin acabar, y ahora estoy liado con los examenes asin que en un mes no lo tocaré.

Le falta areglar un poco los movimientos de la ficha, que no se mueve bien, programar algunos métodos de la matriz del juego principal (las casillas ocupadas se guardan en una matriz 11x22 de enteros), hacer un objeto que gestione el teclado y hacer que la máquina juege

Pero bueno, quizas mirando el codigo saques algunas ideas, o te apetezca continuar con el, aunque aun le queda mucho trabajo por hacer.

te mando el codigo en un fichero adjunto, aunque la verdad que no me gusta mucho ponerlo asi a medias, hubiera preferido poner el codigo cuando el juego funcionara correctamente.

De todas formas, dentro de un par de meses cuando lo acabe y funcione bien, también pondre aqui el código por se le interesa a alguien


Un saludo

Venga, un saludo

3
C/C++ / Re: Se puede borrar sòlo una parte de la pantalla?
« en: Sábado 11 de Enero de 2003, 22:18 »
Existe una funcion para trabajar solo sobre una subpantalla.

Prueba ha hacer eso, para ver si asi la funcion borrar borra solo la subpantalla que usa.

Todo esto es en modo gráfico.
Otra posibilidad es, si por ejemplo el fondo es negro, dibujar un rectangulo negro encima, y asi es como si borraras


Un saludo

4
C/C++ / Re: Podriamos hacer el PC-MAN en C?
« en: Martes 7 de Enero de 2003, 22:49 »
Si tienes tiempo podrías ir haciendo el diséño de como podría ser el juego.

Me refiero a cual va a ser el tamaño de los muñecos, de los malos, cuanto va a ocupar la pantalla jugable, donde se va a colocar el tiempo transcurrido y la puntuacion en la pantalla, los colores etc...

Mira a ver si consigues hacer un diseño atractivo. La pantalla puedes contar con que tiene 480x640 pixeles. No utilices muchos colores, 16 o como mucho 256 (si lo quieres hacer que funcione en DOS, en windows los que quieras).

También podrías hacer el dibujo en el ordenador de los muñecos etc...

Bueno, ya me contaras que tal te va saliendo.


Y cuando acabes con eso, tendrás que empezar a diseñar las clases de los objetos, como se reparten el trabajo y como estan relaccionadas entre ellos, pero para eso primero tendras que tener bien claro el diseño grafico del juego y como se jugara con el

Si quieres, cuando acabes me puedes mandar un e-mail con los comentarios a j_murciego@hotmail.com

Un saludo

5
C/C++ / Re: Podriamos hacer el PC-MAN en C?
« en: Martes 31 de Diciembre de 2002, 01:01 »
Ahora no tengo mucho tiempo, pero en febrero yo me apunto a un bombardeo.


Para empezar podrías ir pensando en las clases necesarias, como por ejemplo:

Una clase pantalla para manejar el monitor, y asi poder hacer el codigo portable (por ejemplo, se podría pasar de dos a windows solo modificando el objeto pantalla).


Se podría hacer tambien una clase "malos" con un metodo mueveMalo() que mueva el malo por la pantalla un instante, lo redibuje y devuelva el control.

También se podría tener una clase "bueno" con un metodo mueveBueno(), que mire a ver que teclas estan pulsadas, y que actue en consecuencia moviendose un instante a la posición que deba y se redibuje.

También tendríamos un objeto "comida" con un método meEstanComiendo() que haga que si hay un bueno en la misma posición que ella, destruya el objeto y borre la comida de la pantalla.

El algoritmo del juego podría ser asi:

Tendríamos una lista de malos, una lista de buenos(por si hay varios jugadores), y una lista de comidas.

El algoritmo principal podría ser asi:

mientras (listaComida !=vacio)
  {
   para malo en ListaMalos
             {
              malo.mueveMalo()            
             }
   para bueno en listaBuenos
             {
              bueno.mueveBueno()
             }
   para comida en listaComidas
              {
              comida.meEstanComiendo()
              }
}


Habría que controlar muchos más detalles, como por ejemplo si se come una fruta y pacMan se puede comer a los malos etc... pero en lineas generales se podría hacer asi.

Como ya dije al principio, a partir de mediados de febrero podría echar una mano.

Un saludo

Javier Murciego

6
C/C++ / quiero reiniciar windows con c++
« en: Martes 31 de Diciembre de 2002, 00:32 »
Para apagar el ordenador puedes llamar a una funcion de la API de windows que se encarga de ello, aunque no se como se hace.

Hay algunos ejemplos de ello por la red, busca con google y lo encontraras facilmente.


Para ejecutar un programa antes de que arranque windows puedes utilizar un truquillo:

Cambias de nombre a win.com, y lo llamas, por ejemplo winini.com o algo asi.
Entonces creas el programa que quieras que se ejecute antes y lo renombras como win.com

Entonces tu programa será lo que se ejecute cuando se intente cargar el windows. Si en la última sentencia de tu programa llamas al verdadero windows, nadie notara que tu programa se ha ejecutado antes.

Si lo que quieres es que un programa se ejecute justo despues de iniciar windows, lo puedes meter en el menu de inicio y ya esta.


Espero que te sirva de algo

Un saludo

7
C/C++ / Re: como habro un programa desde c
« en: Miércoles 4 de Diciembre de 2002, 18:14 »
utiliza la función: system()

por ejemplo, si quieres hacer un dir, pon:

system("dir");

Si quieres ejecutar el programa xxx.exe, pon:

system("xxx");

Si necesitas poner una ruta, ten en cuenta que en c las barras "" tienen ya de por si un significado en los Strings

Creo que se ponía, por ejemplo:

system("dir c:windowscomand");

pero esto lo tendras que probar.

Busca también en que librería esta, porque depende de la versión de c que utilices. Seguramente estara en stdio.h, stdlib.h o conio.h

Espero que te sirva. Un saludo

8
C/C++ / Re: ¿Como saber si na tecla esta pulsada?
« en: Lunes 2 de Diciembre de 2002, 22:34 »
Gracias Avalon

Ya había mirado ese codigo y me resulto muy util. Gracias de todas formas.

Un saludo

9
Inteligencia Artificial / Re: inteligencia artificial
« en: Lunes 2 de Diciembre de 2002, 12:51 »
Más sencillo:

Es tratar de hacer con un ordenador cosas que hacen las personas y que generalmente atribuimos a su inteligencia.


Ejemplo 1:

Sumar numeros grandes normalmente se atribuye a la inteligencia de las personas. Ese problema de IA ya esta resuelto. Es más, desde el punto de vista de la suma de números el ordenador es más "inteligente" que los seres humanos.


Ejemplo 2: Hacer que una máquina sepa jugar al tetris. Que una persona juegue bien al tetris normalmente lo atribuimos a su "inteligencia". Se puede lograr mediante los algoritmos adecuados que una máquina juege bien al tetris, ajedred, etc.....


Normalmente, se atacan los problemas aislados. Sería bonito hacer una máquina que simulase la inteligencia de las personas humanas, pero eso es apuntar muy muy muy alto. Lo que se hace es aislar un problema, como sumar números, calcular el camino más corto, jugar a la ajedred, etc... y hacer una máquina que lo resuelve de forma más o menos efectivas.



El ordenador es tremendamente preciso y rápido. Las personas son impreciasas y lentas y sin embargo, casi siempre dan con una respuesta más o menos buena. Por ejemplo, cuando se habla de recetas de cocina con "una pizca de sal" que es totalmente impreciso etc... sin embargo, ha casi todo el mundo le queda la comida más o menos decente.

Para jugar al tetris, las personas no utilizan un algoritmo preciso que de la solución optima y... sin embargo, muchas personas juegan muy bien al tetris.

Si introduce entonces la lógica difusa, que es la lógica de la imprecisión.
En la lógica "clasica", a un elemento le pueden ocurrir dos cosas, que pertenezca a un conjunto o que no pertenezca.
Sin embargo, en la lógica difusa esta la pertenencia con grado.

Por ejemplo, en la vida real, una persona es joven si es menor de 20 años, pero .... y si tiene 20 años y 3 días, ¿ya no es joven? SI es joven, pero con menor grado. La persona va dejando de ser joven a medida que avanza su edad, esto es, a medida que su edad aumenta el grado de pertenecia al conjunto de los jovenes disminuye, hasta, por ejemplo, llegar a los 40 años, donde diremos que la persona no pertenece al conjunto de los jovenes (o pertenece con grado 0).

Es por ello, la lógica difusa, con sus reglas especiales, la que se aplica para resolver los problemas de IA.


Bueno, espero que este ladrillo te haya aclarado algo las ideas.

Un saludo

10
C/C++ / Re: problema de la mochila
« en: Lunes 2 de Diciembre de 2002, 12:17 »
Un problema se dice que pertenece a la clase NP si existe una máquina de Turing NO determinista que lo resuelve en tiempo polinomial.

Un problema se dice DURO para una clase si cualquier problema de esa clase se puede "tranformar" a el en tiempo Polinomial. En particular, un problema es NP-DURO si cualquier problema NP se puede reducir a el en tiempo polinomial (o lo que es equivalente, es espacio logaritmico)

Un problema es NP-completo si es NP y además es NP-DURO, o sea, DURO para la clase NP.


Es facil ver, que cualquier problema P es NP, y que cualquier problema NP es EXP (resolubles por una máquina determinista en tiempo exponencial).

También se sabe que P es distinto de EXP.

Entonces tenemos la siguiente cadena de desigualdades:

P contenido en NP contenido en EXP y P distinto de EXP

Entonces P es distinto de EXP o de P o de ambos (existen muchas clases de complejidad intermedia). La duda es: En esa cadena,¿en que punto de da la desigualdad extricta?

Bueno, no me enrollo más. Si quieres hablar más de este tema no dudes en decirmelo.

Un saludo

11
C/C++ / Re: problema de la mochila
« en: Domingo 1 de Diciembre de 2002, 17:44 »
Hola.

Yo soy el matemático de computación.

Efectivamente, el problema de la mochilla fraccionada se puede resolver mediante una algoritmo voraz, y la solución dada es la exacta.

Para el problema de la mochila no fraccionada nosotros usabamos algoritmos de programación dinámica, y de exploración del arbol de soluciónes con ramificación y acotacion (usando el problema de la mochila fraccionada) y el ramificación y poda.

No recuerdo si el problema era NP-completo. Lo que si esta claro es que es NP, puesto que una máquina con oraculo lo resuelve en tiempo polinomial.

Para informarte sobre el tema puedes mirar el libro G.Brassard- P.Bratley  "Algoritmica, Concepcion y Analisis" Ed. Masson

Por cierto, el problema de cortar tablas que sugerí para un reto, y que nadie lo ha resuelto aun, creo que también es NP-completo, aunque estuve casi un més intentando resolverlo y no fui capaz (y la profesora que me daba Calculabilidad tampoco).

Un saludo

12
C/C++ / Re: Nivel de Conocimientos de los miembro!!!
« en: Viernes 29 de Noviembre de 2002, 19:02 »
Nivel en C: Novato

Nivel en algoritmia: Medio. Programación en TADs y orientada a objetos.

Otros lenguajes: Java (peor que C), y también he programado en Mathematica, Matlab, Gap, Maple, Fortran 77, Pascal y C Borland Builder.

Soy estudiante de Matematicas en la especialidad de Computación, a falta de 4 asignaturas para acabar


Un saludo

13
C/C++ / Re: ¿Como saber si na tecla esta pulsada?
« en: Jueves 28 de Noviembre de 2002, 22:59 »
Hola wimogan

El problema de la solución que me dices es que si poner getch(), el sistema se para hasta que se pulse una tecla, y eso no es lo que yo quiero.

Lo que yo quiero es saber que teclas estan pulsadas y que teclas no,y no esperar a que se pulse una tecla. No se si me explico bien.

La solución dada por kenshin es la ideal, si la pudiera hacer funcionar. Alli se tiene una matriz teclado[] que se actualiza cuando se lo dices y que te dice si la tecla i esta presionada o no lo esta.


Otra solución que he visto por el codigo de algunos juegos, es usar la función kb??? pongo ? porque no me acuerdo el nombre exacto, que devuelve 0 o 1 dependiendo de si hay alguna tecla pulsada. Entonces si hay una tecla pulsada se usa getche() para obtenerla. Pero el problema es...¿que pasa si hay tres teclas presionadas a la vez?

La solución es hacer funcionar el programilla que viene en teclado.doc de kenshin, pero ese tipo de programa a mi se me escapa. No entiendo bien lo que hace.

Si alguien es capaz de hacerlo funcionar se lo agradecería mucho.

Un saludo y gracias a todos


Javier Murciego

14
C/C++ / Re: ¿Como saber si na tecla esta pulsada?
« en: Miércoles 27 de Noviembre de 2002, 14:17 »
Aun no esta acabado, me falta lo del teclado y hacer el algoritmo para que la máquina juegue y algun detallin sin importacia.

Si quieres te lo puedo pasar asi, o cuando lo termine

Un saludo

15
C/C++ / Necesito un juego para proyecto
« en: Lunes 25 de Noviembre de 2002, 12:29 »
Un juego muy sencillo es el que en los bordes izquierdo y derecho de la pantalla tienes dos rectangulos, uno lo manejas tu y el otro la máquina, que se pueden mover arriba y abajo, y hay una pelota moviendose por la pantalla que rebota en estos rectangulos.

No se si me he explicado bien.... es tipo arcanoid, pero con dos jugadores y sin que haya que romper piezas, y donde el objetivo es que no te cuelen un gol (que se escape la bola por tu lado).


Es bastante sencillo si se hace con c++, salvo el problema de que para mover el rectangulo del jugador hace falta saber si la tecla correspondiente esta pulsada o no, que es lo que he preguntado en otro topic.

Sabiendo esto es muy sencillo. Si te interesa te puedo hacer un esquema de los objetos y metodos que necesitas.

Un saludo

16
C/C++ / UN FAVOR, no tendran un algoritmo para encontrar la longitu
« en: Lunes 25 de Noviembre de 2002, 12:14 »
Creo que se puede hacer de forma recursiva de la siguiente manera:

int alturaArbol(arbol a)
   {
   //Caso base: Estamos en una hoja;
   if (esHoja(a)) return 0;
   else
      {
       return 1+maximo(alturaArbol(a.hijoIzquierdo),alturaArbol(a.hijoDerecho));
      }
}

Espero que te sirva de ayuda. Tendrás que adaptar el codigo a tu caso concreto


Un saludo

Javier Murciego

17
C/C++ / Re: Hacer aleatorios!!!!!!!!!
« en: Viernes 22 de Noviembre de 2002, 12:47 »
Donde dices que estudias informática y no sabes hacer esto???

Hacerlo directamente es imposible, puesto que el número de posibilidades es muy grande (10!).

Lo puedes hacer por pasos de la siguiente forma: Por planificacion de tareas:

Lo primero que debes hacer es colocar el número 1. Para ello generas un número del 1 al 10 y le asignas esa posición.

Luego tienes que colocar el 2 en una de las 9 casillas restantes. Para ello generas un número aleatorio del 1 al 9 y colocas el 2 en la casilla correspondiente (donde esta el 1 no cuenta).

Seguidamente tienes que colocar el 3 en una de las 8 casillas restantes, generando un número aleatorio entre 1 y 7 etc.....



Otra forma más sencilla, pero de la que no estoy seguro de que la probabilidad de cada permutación sea la misma (1/10!) es colocar los números consecutivamente, y despues con un "for" vas recorriendo el vector de atras hacia adelante intercambiando el elemento en cuestion con uno al azar del vector. En pseudocodigo seria:


for (i=10;i>=2;i--)
   {
    intercambiar(lista,lista[random(1,i-1)])
   }




Existen además otras muchas variantes y metodos más o menos sencillos.

Espero haberte servido de ayuda.


Un saludo
Javier Murciego

18
C/C++ / Re: ¿Como saber si na tecla esta pulsada?
« en: Miércoles 20 de Noviembre de 2002, 12:47 »
Hola de nuevo

No he conseguido compilar el codigo que me manda kenshin. Lo he copiado tal cual añadiendo las variables tecla[] y definiendo SI y No, pero al ir a compilar me da un error estraño.

Estoy usando Turbo C 1.01

No se nada de ensamblador ni de las interrupciones. ¿Alguien a conseguido que funcione? Me gustaría conseguir un fragmento de codigo que funcione y donde solo tenga que mirar a la tecla[].

Muchas gracias

Por cierto, si a alguien le interesa el codigo del minijuego que estoy haciendo se lo paso sin ningun problema. Es parecido al tetris pero disparando a las piezas.

Mi e-mail es j_murciego@hotmail.com

19
C/C++ / Re: ¿Como saber si na tecla esta pulsada?
« en: Jueves 24 de Octubre de 2002, 13:05 »
Muchas gracias por la información

20
C/C++ / Re: ¿Como saber si na tecla esta pulsada?
« en: Martes 1 de Octubre de 2002, 11:47 »
¿Como podría saber si una tecla esta pulsada o no?

Es para intentar hacer un jueguecito, y asi, por ejemplo, hacer que si la z esta pulsada, se mueva el muñeco hacia la izquierda, y si esta la c pulsada, a la derecha etc....

Me gustaría hacerlo en c++,  sin usar funciones de windows.

Por favor, mandarme también un e-mail con la respuesta a j_murciego@hotmail.com

Gracias

Páginas: [1]