You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					
					
						
							144 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							144 lines
						
					
					
						
							3.0 KiB
						
					
					
				| <?php | |
| 
 | |
| require( "../../../config.php"); | |
| include_once("class.Sudoku.php"); | |
| require( '../header.php'); | |
| 
 | |
| $action = optional_param('action', PARAM_ALPHA);   // action | |
|  | |
| if( $action == 'create'){ | |
| 	AppendSudokuB(); | |
| }else | |
| { | |
| 	showform(); | |
| } | |
| 
 | |
| function showform() | |
| { | |
| 	$id = required_param('id', PARAM_NUMBER);   // action | |
| 	 | |
| 	?> | |
| <form name="form" method="post" action="create.php"> | |
| <center> | |
| <table cellpadding="5"> | |
| <tr valign="top"> | |
|     <td align="right"><b><?php  echo get_string( 'sudoku_create_count', 'game'); ?>:</b></td> | |
|     <td> | |
|         <input type="text" name="count" size="6" value="2" /><br> | |
|     </td> | |
| </tr>	 | |
| <tr><td colspan=2><center><br><input type="submit" value="<?php  print_string('sudoku_create_start', 'game') ?>" /></td></tr> | |
| </table> | |
| <input type="hidden" name=action        value="create" > | |
| <input type="hidden" name=level1        value="1" > | |
| <input type="hidden" name=level2        value="10" > | |
| <input type="hidden" name=id        value="<?php  echo $id; ?>" /> | |
| </form> | |
|  | |
| 	<?php | |
| 	 | |
| } | |
|  | |
| function AppendSudokuB() | |
| { | |
|     global $DB; | |
|  | |
| 	$level1 = required_param('level1', PARAM_NUMBER);   // action | |
| 	$level2 = required_param('level2', PARAM_NUMBER);   // action | |
| 	$count = required_param('count', PARAM_NUMBER);   // action | |
|  | |
| 	$level = $level1; | |
|    | |
| 	for( $i=1; $i <= $count; $i++) | |
| 	{ | |
| 		//set_time_limit( 30); | |
| 		Create( $si, $sp, $level); | |
|    | |
| 		$newrec->data = PackSudoku( $si, $sp); | |
| 		if( strlen( $newrec->data) != 81){ | |
| 			return 0; | |
| 		} | |
| 		$newrec->level = $level; | |
| 		$newrec->opened = GetOpened( $si); | |
|    | |
| 		$DB->insert_record( 'game_sudoku_database', $newrec, true); | |
|      | |
| 		$level++; | |
| 		if( $level > $level2){ | |
| 			$level = $level1; | |
| 		} | |
| 		 | |
| 		echo get_string( 'sudoku_creating', 'game', $i)."<br>\r\n"; | |
| 	} | |
| } | |
|  | |
| function PackSudoku( $si, $sp) | |
| { | |
| 	$data = ""; | |
|  | |
| 	for ($i = 1; $i <= 9; $i++) | |
| 	{ | |
| 		for ($j = 1; $j <= 9; $j++) | |
| 		{	 | |
| 			$c = &$sp->theSquares[$i]; | |
| 			$c = &$c->getCell($j) ; | |
| 			$solution = $c->asString( false); | |
|  | |
|  		   $c = &$si->theSquares[$i] ; | |
|  		   $c = &$c->getCell($j) ; | |
|  		   $theSolvedState = $c->solvedState() ; | |
|  		    		 | |
| 			if( $theSolvedState == 1) {  //hint | |
| 				$solution = substr( 'ABCDEFGHI', $c->asString( false) - 1, 1);	 | |
| 			} | |
| 	 | |
| 			$data .= $solution; | |
| 		} | |
| 	} | |
|  | |
| 	return $data; | |
| } | |
|  | |
|  | |
| function create( &$si, &$sp, $level=1) | |
| { | |
| 	for( $i=1; $i <= 40; $i++) | |
| 	{ | |
| 		//set_time_limit( 30); | |
| 		$sp = new Sudoku() ; | |
| 		$theInitialPosition = $sp->generatePuzzle( 10, 50, $level) ; | |
| 		if( count( $theInitialPosition)){ | |
| 			break; | |
| 		} | |
| 	} | |
| 	if( $i > 40){ | |
| 		return false; | |
| 	} | |
|  | |
| 	$si = new Sudoku() ; | |
|  | |
| 	$si->initializePuzzleFromArray($theInitialPosition); | |
|    | |
| 	return true; | |
| } | |
|  | |
| function GetOpened( $si) | |
| { | |
|   $count = 0; | |
|    | |
|   for ($i = 1; $i <= 9; $i++) | |
|   { | |
|   	for ($j = 1; $j <= 9; $j++) | |
|   	{		    		 | |
|  		   $c = &$si->theSquares[$i] ; | |
|  		   $c = &$c->getCell($j) ; | |
|  		   $theSolvedState = $c->solvedState() ; | |
|  		    		 | |
| 	     if( $theSolvedState == 1)   //hint | |
|           $count++; | |
|   	} | |
|   } | |
|  | |
|   return $count; | |
| } | |
| 
 | |
| 
 |