elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / duda freopen en: 19 Julio 2010, 16:10 pm
bueno, pues según lo que leí el freopen sirve para abrir un archivo y asignarlo para el flujo de datos de entrada o de salida, por ejemplo, yo lo estoy usando para llenar unas matrices en un programa que intenta resolver algun sudoku, y mi problema es que no se como cerrar el archivo, y como lo asigno para que de ahi vengan los datos de entrada, pues ya no puedo aplicar algo para que el usuario salga del programa sin matarlo.
y esa es mi duda, como cerrar un archivo o volver a que los datos de entrada entren por el teclado y no por el archivo.

Por si lo quieren revisar, este es el codigo del programa, aun me falta mucho, pues ahora solo resuelve sudokus faciles, ya despues le intentare meter backtracking, pero por ahora es solo esto  :P
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int sudoku[9][9], matriz[9][9], seguros[9][9], posible=0, unicas=1;
  6. bool usado[10];
  7.  
  8. void imprimir();
  9. void unicas_soluciones();
  10. void comprobar(int a, int b);
  11.  
  12. int main()
  13. {
  14.  
  15.  
  16.    freopen("sudoku.txt","r",stdin);
  17.    for(int i=0; i<9; i++){
  18.            for(int j=0; j<9; j++){
  19.                    cin>>sudoku[i][j];
  20.                    }
  21.            }
  22.    freopen("config.txt","r",stdin);
  23.    for(int i=0; i<9; i++){
  24.            for(int j=0; j<9; j++){
  25.                    cin>>matriz[i][j];
  26.                    }
  27.            }
  28.    for(int i=0; i<9; i++){
  29.            for(int j=0; j<9; j++){
  30.                    if(sudoku[i][j]==0)seguros[i][j]=0;
  31.                    else seguros[i][j]=1;
  32.                    }
  33.            }
  34.  
  35.    imprimir();
  36.  
  37.    unicas_soluciones();
  38.  
  39.    imprimir();
  40.  
  41.  
  42.    while(cin.get() != '\n')
  43.    setbuf(stdin, '\0');
  44.    cin.get();
  45.    return 0;
  46. }
  47. void comprobar(int a, int b){
  48.    int sub_matriz=matriz[a][b];
  49.    int cont=0;
  50.    if(seguros[a][b]==0){
  51.                  for(int i=0; i<10; i++){
  52.                          usado[i]=0;
  53.                          }
  54.                  for(int i=0; i<9; i++){
  55.                               usado[sudoku[a][i]]=1;
  56.                               usado[sudoku[i][b]]=1;
  57.                          }
  58.                  for(int i=0; i<9; i++){
  59.                          for(int j=0; j<9; j++){
  60.                            if(sub_matriz==matriz[i][j]){
  61.                                                         usado[sudoku[i][j]]=1;
  62.                                                         }
  63.                            }
  64.                  }
  65.                  if(unicas==1){
  66.                          for(int i=0; i<10; i++){
  67.                                  if(usado[i]==0)cont++;
  68.                                  }
  69.                          if(cont==1){
  70.                                      posible=1;
  71.                                      cout<<"Posibles para "<<b+1<<","<<a+1<<endl;
  72.                                      for(int i=0; i<10; i++){
  73.                                              if(usado[i]==0){
  74.  
  75.                                                              seguros[a][b]=1;
  76.                                                              sudoku[a][b]=i;
  77.                                                              cout<<i<<endl;
  78.                                                              }
  79.                                              }
  80.  
  81.                                      }
  82.                                      }
  83.                          }
  84.    }
  85. void unicas_soluciones(){
  86.     posible=0;
  87.     for(int i=0; i<9; i++){
  88.             for(int j=0; j<9; j++){
  89.                     comprobar(i,j);
  90.                     }
  91.             }
  92.     cout<<"_________________"<<endl;
  93.     if(posible!=0) unicas_soluciones();
  94.     unicas=0;
  95.     }
  96. void imprimir(){
  97.     int counta=0,countb=0;
  98.     for(int i=0; i<9; i++){
  99.            for(int j=0; j<9; j++){
  100.                         cout<<sudoku[i][j];
  101.                         counta++;
  102.                         if(counta==3||counta==6)cout<<" ";
  103.                    }
  104.                    if(counta==9)counta=0;
  105.                    countb++;
  106.                    if(countb==3||countb==6)cout<<endl;
  107.                    cout<<endl;
  108.            }
  109.     }
  110.  
  111.  
y los archivos sudoku y config contienen:
sudoku.txt
Código:
0 0 0 0 4 3 0 0 6
0 0 0 0 0 0 4 8 0
2 4 8 0 0 0 0 0 7
3 2 0 0 0 6 8 0 9
1 8 0 3 0 0 6 0 2
6 0 0 0 0 0 7 3 5
0 7 0 0 0 0 5 6 0
5 0 2 6 0 0 0 0 3
8 6 0 0 5 0 0 0 0;

y
config.txt
Código:
1 1 1 2 2 2 3 3 3
1 1 1 2 2 2 3 3 3
1 1 1 2 2 2 3 3 3
4 4 4 5 5 5 6 6 6
4 4 4 5 5 5 6 6 6
4 4 4 5 5 5 6 6 6
7 7 7 8 8 8 9 9 9
7 7 7 8 8 8 9 9 9
7 7 7 8 8 8 9 9 9;
2  Programación / Desarrollo Web / Ayuda con bugs en PONG (html5<canvas> + javascript) en: 7 Julio 2010, 06:41 am
Pues bueno, soy nuevo en el foro, y pues, programando apenas llevo unos 6 meses, todo lo que se es de manera autodidacta, y esta es la segunda 'aplicacion' web que hago, ya antes habia visto muy poco de html y muuuuy pero muy poco de js, ahora ya eh avanzado mas y se de js, css, php(muy poco), c++, pascal(tambien muy poco), y me defiendo un poco en lo que a logica se refiere.

Los problemas que me faltan por solucionar en este juego es que la forma en que bajan y suben las barras se ve muy 'mecanico', no hay alguna manera hacerlo un poco mas dinamico?, tambien, cuando se deja presionada alguna tecla para bajar una de las dos barras o subirla, si el otro jugador presiona una tecla, la del primer jugador deja de moverse, y quisiera saber si se puede hacer una funcion que haga que se aprieten dos teclas al mismo tiempo.
Y otra cosa, despues de varios golpes la pelota se hace demasiado rapida(avanza con una cantidad muy grande de pixeles) y aunque se tope con alguna de las barras, la pelota se sigue de filo y pues se dá como punto para el contrincante, y quisiera saber si existe una forma para que no 'avance' de tantos pixeles, porque le intento bajar la cantidad y el juego se ve demasiado lento...

El codigo de la pagina es la siguiente, ahora solo lo eh testeado en chrome, la verdad no se si funcione en ff o en opera...
Código
  1. <html>
  2. <head></head>
  3. <body bgcolor="black">
  4. <canvas id="a" style="position:absolute;left:0px;top:0px;"></canvas>
  5. <script type="text/javascript">
  6. var numtema = 0;
  7. var tema = {colorbola:['rgb(200,0,200)','rgb(0,0,0)','rgb(200,0,50)'],
  8. colorbarra:['rgb(50,200,20)','rgb(0,0,255)','rgb(255,240,20)'],
  9. texto:['rgb(255,255,255)','rgb(0,0,0)','rgb(255,255,255)'],
  10. fondo:['rgb(0,0,0)','rgb(255,255,255)','rgb(0,0,255)'],
  11. fondofiltro:['rgba(0,0,0,.25)','rgba(255,255,255,.25)','rgba(0,0,255,.25)']};
  12. var filtro=true;
  13. var pause=false;
  14. var velocidad = 15;
  15. var bola = {x:window.innerWidth/2,y:window.innerHeight/2};
  16. var vel = {x:(Math.random()*(velocidad*2))-velocidad,y:(Math.random()*(velocidad*2))-velocidad};
  17. var barra = {p1:0,p2:0};
  18. var score = {p1:0,p2:0};
  19.  
  20. var canvas=document.getElementById('a');
  21. var ctx;
  22. if(canvas && canvas.getContext){
  23. ctx = canvas.getContext('2d');
  24. ini();
  25. }
  26. function ini(){
  27. window.addEventListener('resize', ResizeW, false);
  28. setInterval( pong, 1000/30);
  29. ResizeW();
  30. }
  31. function pong(e){
  32. if(pause){}
  33. else{
  34. ctx.fillStyle = filtro?tema.fondofiltro[numtema]:tema.fondo[numtema];
  35. ctx.beginPath();
  36. ctx.fillRect(5,0,window.innerWidth-5,window.innerHeight);
  37. ctx.closePath();
  38. ctx.fill();
  39. ctx.fillStyle = tema.fondo[numtema];
  40. ctx.beginPath();
  41. ctx.fillRect(0,0,5,window.innerHeight);
  42. ctx.closePath();
  43. ctx.fill();
  44. ctx.fillStyle = tema.fondo[numtema];
  45. ctx.beginPath();
  46. ctx.fillRect(window.innerWidth-5,0,window.innerWidth,window.innerHeight);
  47. ctx.closePath();
  48. ctx.fill();
  49.  
  50. ctx.fillStyle = tema.texto[numtema];
  51. ctx.font = '15px""';
  52. ctx.fillText("Controles",50,30);
  53. ctx.fillText("P1: arriba=w abajo=s",50,45);
  54. ctx.fillText("P2: arriba=8 abajo=2",50,60);
  55. ctx.fillText("Nueva bola= n",50,75);
  56. ctx.fillText("Desenfoque por movimiento= f",50,90);
  57. ctx.fillText("Temas +=derecha, -=izquierda",50,105);
  58. ctx.fillText("Pause= p",50,120);
  59. ctx.font = '35px""';
  60. ctx.fillText(score.p1+" || "+ score.p2 ,(window.innerWidth/2)-30,30);
  61.  
  62. ctx.fillStyle = tema.colorbarra[numtema];
  63. ctx.beginPath();
  64. ctx.fillRect(0,barra.p1,5,150);
  65. ctx.closePath();
  66. ctx.fill();
  67. ctx.fillStyle = tema.colorbarra[numtema];
  68. ctx.beginPath();
  69. ctx.fillRect(window.innerWidth-5,barra.p2,5,150);
  70. ctx.closePath();
  71. ctx.fill();
  72.  
  73. ctx.fillStyle = tema.colorbola[numtema];
  74. ctx.beginPath();
  75. ctx.arc(bola.x,bola.y,15,0,2*Math.PI,false);
  76. ctx.closePath();
  77. ctx.fill();
  78.  
  79. if(bola.x>0 && bola.x<window.innerWidth-1){
  80. vel.x=(((bola.x<20) && ((bola.y>barra.p1)&&(bola.y<barra.p1+150))) || (bola.x>window.innerWidth-20&& ((bola.y>barra.p2)&&(bola.y<barra.p2+150))))?vel.x*-1.15:vel.x;
  81. vel.y=(bola.y<15 || bola.y>window.innerHeight-15)?-vel.y:vel.y;
  82. if(vel.x<-28)vel.x=-27;
  83. if(vel.x>28)vel.x=30;
  84. bola.x+=vel.x;
  85. bola.y+=vel.y;
  86. if(bola.x<1)score.p2++;
  87. if(bola.x>window.innerWidth-1)score.p1++;
  88. }
  89. else{
  90. bola.x=-30;
  91. bola.y=-30;
  92. }
  93. }
  94. }
  95. function ResizeW(e){
  96. canvas.width = window.innerWidth;
  97. canvas.height = window.innerHeight;
  98. }
  99. document.onkeydown = function (event){
  100. var keycode = (window.event||event).keyCode;
  101. switch(keycode){
  102. case 87: //p1 arriba
  103. barra.p1-=45;
  104. barra.p1<0?(barra.p1=0):(barra.p1=barra.p1);
  105. break;
  106. case 83: //p1 abajo
  107. barra.p1+=45;
  108. barra.p1+90>window.innerHeight?(barra.p1=window.innerHeight-90):barra.p1=barra.p1;
  109. break;
  110. case 104: //p2 arriba
  111. barra.p2-=45;
  112. barra.p2<0?(barra.p2=0):(barra.p2=barra.p2);
  113. break;
  114. case 98:  //p2 abajo
  115. barra.p2+=45;
  116. barra.p2+90>window.innerHeight?(barra.p2=window.innerHeight-90):(barra.p2=barra.p2);
  117. break;
  118. case 80: //pause
  119. pause=pause?false:true;
  120. break;
  121. case 70: //filtro
  122. filtro=filtro?false:true;
  123. break;
  124. case 78: //nueva bola
  125. vel = {x:(Math.random()*(velocidad*2))-velocidad,y:(Math.random()*(velocidad*2))-velocidad};
  126. bola = {x:window.innerWidth/2,y:window.innerHeight/2};
  127. break;
  128. case 37: //tema--
  129. numtema==0?(numtema=2):numtema--;
  130. break;
  131. case 39: //tema++
  132. numtema==2?(numtema=0):numtema++;
  133. break;
  134. default:
  135. break;
  136. }
  137. }
  138. </script>
  139. </body>
  140. </html>
  141.  

Quizá se pueda optimizar mucho, pero primero quiero terminarlo asi y ya despues acortarlo....

Se aceptan criticas constructivas  ;D
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines