/****************************************************
input:extern int sudo[9][9]
output:对于数独中空位进行检查
简介:判断输入的数据在数独数列中是否正确 *****************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "SudoPrint.h"
extern int sudo[9][9]; //调用main函数中的数独数列
extern int sudocheck[9][9];void SudoCheck()
{int x=17,y=8;  //数独数组中的空位坐标 int i=0,j=0;  //数独数组中的第0行和第0列开始进行数据判断 char inputdata;while(inputdata!='o'&&inputdata!='O'){    gotoxy(x,y);scanf("%c",&inputdata);fflush(stdin);if(sudo[i][j]==(inputdata-48))  //判断输入是否正确 符合数独唯一解
        {gotoxy(5,5);printf("恭喜你数据输入正确,请输入下一个数据!");sudocheck[i][j]=(inputdata-48);  //存入数独数组中if(i==8&&j==8) //如果进行到最后一个正确情况 跳出循环
            {break; }if(x==57)  //如果坐标x到达57 说明奇数行应该进入下一行判断
            {y++;x=22;i++;j=1;}else if(x==52)//如果坐标x到达52 说明偶数行应该进入下一行判断
            {y++;i++;x=17; j=0;                } else{ x+=10; //如果不是57,我们正常进行下一步 j+=2;     } } else{gotoxy(5,5);printf("抱歉!你的输入数据有误,请重新尝试!");}SudoPrint(); }system("cls");gotoxy(5,5);printf("游戏结束!");getch(); gotoxy(5,5);printf("还想不想再来一次? 非常想(y)   不想(按任意键)");}/****************************************************
input:int temp[9][9]
output:输出数独游戏界面
简介:输出数独游戏界面 输出过场动画 ,生成一个最初的游戏数独数组 *****************************************************/ #include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
extern int sudo[9][9]; //调用main函数中的数独数列
extern int sudocheck[9][9];  //游戏中使用部分挖空的数独数组 void gotoxy(int x, int y)
{COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体,具体位置
}
void plane(int i)  //输出两架飞机
{/*左边的飞机*/gotoxy(i,10);printf("    *");gotoxy(i,11);printf("*  **");gotoxy(i,12);printf("* ***");gotoxy(i,13);printf("*******");gotoxy(i,14);printf("* ***");gotoxy(i,15);printf("*  **");gotoxy(i,16);printf("    *");/*右边的飞机*/    gotoxy(80-i,10);printf("  *");gotoxy(80-i,11);printf("  **  *");gotoxy(80-i,12);printf("  *** *");gotoxy(80-i,13);printf("*******");gotoxy(80-i,14);printf("  *** *");gotoxy(80-i,15);printf("  **  *");gotoxy(80-i,16);printf("  *");
}
/*数独数列部分区域需要挖空,填0,作为游戏空
偶数行,偶数列挖空。奇数行奇数列挖空。
完成后一个宫空位4个或5个 */
void Gamearray()
{int i,j;for(i=0;i<9;i++){gotoxy(15,8+i);for(j=0;j<9;j++)    {if(i%2==0)  //当i为偶数时候
            {if(j%2==1)  //j为奇数的数据填入
                {sudocheck[i][j]=sudo[i][j];}}else{if(j%2==0)  //j为偶数的数据填入
                {sudocheck[i][j]=sudo[i][j];}} }}
}
void Sudo_Interface()  //打印游戏前的过场动画
{int i;system("COLOR 34"); // DOS2f 窗 背景绿色字白色 for(i=1;i<8;i++){gotoxy(26,4);printf("-----欢迎进入数独游戏-----");plane(i*10);sleep(1);system("cls");}gotoxy(26,4);printf("-----欢迎进入数独游戏-----");gotoxy(25,8);printf("-----请按任意键继续-----");getch();system("cls");
} void SudoPrint()
{gotoxy(5,1);printf("**请把数字1-9填入数列中数据为0的空格中,按回车确定**");gotoxy(5,2);printf("**要求填入数字不能在同一行、列或宫中出现多于一次**");gotoxy(5,3);printf("**按照光标引导一次填入数据,直到完成数独数列游戏**");int i,j;gotoxy(15,7);printf("*********************************************");for(i=0;i<9;i++){gotoxy(15,8+i);for(j=0;j<9;j++)    {printf("| %d |",sudocheck[i][j]);}}gotoxy(15,17);printf("*********************************************");gotoxy(5,21);printf("字母O 退出           Enter 确认输入       Backspce 删除当前输入   ");
} #ifndef _SuduPrint_H
#define _SuduPrint_H
void gotoxy(int x, int y);
void Gamearray();
void Sudo_Interface();
void SudoPrint();#endif/****************************************************
input:int temp[9][9],int i,int j,int k
output:boolean
简介:判断数组temp中第i行,第j列,中是否能够存放k数据,
是否符合数独数列规则 *****************************************************/ #include <stdio.h>
#include "SuduCheck.h"
int SuduCheck(int temp[9][9],int i,int j,int k)  //判断是否可以将第i行、第j列的数设为k
{int m,n;//判断行for(n=0;n<9;n++){if(temp[i][n]==k)return 0;               }//判断列for(m=0;m<9;m++){if(temp[m][j]==k)return 0;}//判断所在小九宫格int t1=(i/3)*3,t2=(j/3)*3;for(m=t1;m<t1+3;m++){for(n=t2;n<t2+3;n++){if(temp[m][n]==k)return 0;}}//可行,返回truereturn 1;
}#ifndef _SudoCheck_H
#define _SudoCheck_H
void SudoCheck(); #endif/****************************************************
input:int temp[9][9]
output:生成一个随机的数独列表
简介:输入一个空的数组,可以生成一个符合规范的数独数列 *****************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "SuduInput.h"
#include "SuduCheck.h"
#include "SuduGain.h"void cleanup(int temp[9][9])
{int i,j;for(i=0;i<9;i++){for(j=0;j<9;j++){temp[i][j]=0;}}
}int SuduGain(int temp[9][9])
{int i,j,m,n,random=1;  //初始值第一个随机数是我学号最后一位,201810775001 //srand((unsigned)time(NULL));  //随机数据初始化for(i=0;i<9;i++)   //循环每一行
    {for(j=0;j<9;j++)  //循环每一列
        {m=0;while(SuduCheck(temp,i,j,random)==0)  //判断此随机数是否能够使用,如果能够使用跳出循环,否则继续循环
            {random=rand()%9+1;  //生成一个0-9的随机数m++;if(m>100)  //如果同一个位置循环100次失败,判断此数独行失败,返回从新开始
                {return 0;//此数独数列失败,从新开始
                }}temp[i][j]=random;//此数已经通过检查,可以放入数组 //SuduInput(temp);//printf("m=%d  n=%d\trandom=%d\n",m,n,random);//getch();
        }    }return 1;  //数独列表生成成功
}
void SudoBuilde(int temp[9][9])
{int i,n;n=1;  //输入需要数独数据个数for(i=0;i<n;i++)  //循环获得数独
    {    do {cleanup(temp);  //清理数组 }while(SuduGain(temp)==0);  //如果数独生成失败,返回结果为0,则清空sudo数组,继续再试直到成功
        SuduInput(temp); }
}#ifndef _SuduGain_H
#define _SuduGain_H
void cleanup(int temp[9][9]);
int SuduGain(int temp[9][9]);#endif/****************************************************
input:int temp[9][9]
output:输出数组temp到文件中和打印到屏幕上
简介:把传递的数组打印到 sudotiku.txt文件中和屏幕上
*****************************************************/ #include <stdio.h>
#include <stdlib.h>
#include "SuduInput.h"
void SuduInput(int temp[9][9])
{int i,j;FILE *fp;#if 0//数独输出到屏幕for(i=0;i<9;i++)  {for(j=0;j<9;j++){printf("%d",temp[i][j]);    }printf("\n");    }printf("\n");#endif//数独输出到文档 if((fp = fopen("sudotiku.txt", "w+")) == NULL){printf("Can,t opent file!");exit(1);}for(i=0;i<9;i++)  {for(j=0;j<9;j++){fprintf(fp,"%d ",temp[i][j]);    }fprintf(fp,"\n");        }fprintf(fp,"\n");  fclose(fp);
}#ifndef _SuduInput_H
#define _SuduInput_H
void SuduInput(int temp[9][9]);#endif/****************************************************
说明: main.c  2018.10.14  longjt
input:None
output:None
简介:主函数完成数独游戏
*****************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "SuduInput.h"
#include "SuduCheck.h"
#include "SuduGain.h"
#include "SudoPrint.h"
int sudo[9][9]={0};
int sudocheck[9][9]={0};
int main(int argc, char *argv[])
{do{     cleanup(sudocheck);  //先清理干净游戏数独数组 SudoBuilde(sudo); //生成一个数独数列 Sudo_Interface(); //数独游戏过场动画 Gamearray();  //生成一个最初的数独游戏数组  SudoPrint();  //打印游戏界面
        SudoCheck(); fflush(stdin);  //清理干净flash}while(getch()=='y');     getch();return 0;
}

转载于:https://www.cnblogs.com/xiaoyoushang/p/9797520.html

第二把数独游戏 代码相关推荐

  1. Linux数独小游戏C语言,发一个自己制作的数独游戏代码!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void draw(int i,int j) {setcolor(5); rectangle(45+j*30,45+i*30,36+(j+1)*30,36 ...

  2. 【第二十三题】带旋转的数独游戏|dfs(北理工/北京理工大学/程序设计方法与实践/小学期 )

    目录 ​ 前言 dfs学习 思路 代码修正 源代码 我修正后的代码 前言 说实话这题我弄的也不是很明白,而csdn上只有一份代码@loveumozart,还没多少注释,关键还有很多冗余代码,于是我就做 ...

  3. [WebAssembly 入门] 实现数独游戏 - 如何优雅的组织Rust代码

    title: [WebAssembly 入门] 实现数独游戏 - 如何优雅的组织Rust代码 date: 2018-4-23 22:55:00 categories: WebAssembly, 笔记 ...

  4. python数独游戏源代码100行_python实现解数独程序代码

    偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...

  5. Python游戏项目:69行代码编写记忆数独游戏

    2019独角兽企业重金招聘Python工程师标准>>> 前言 freegames是Apache2许可的免费Python游戏集合,旨在用于教育和娱乐,完全是开源的,我们只要引用编写就好 ...

  6. 数独游戏完整java代码_Java实现蓝桥杯数独游戏的示例代码

    你一定听说过"数独"游戏. 如图,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数独的答案都是唯一 ...

  7. ACM之八数码问题----BFS搜索----数独游戏的模拟(下)

    题目描述;数独游戏的内核代码 八数码问题; 编号为1到8的8个正方形滑块被摆成3行3列;(有一个格子留空); 每次可以把与空格相邻的滑块(有公共边才算相邻)移到空格中; 而它原来的位置就成为了新的空格 ...

  8. HTML5 Canvas制作数独游戏(一)

    初次接触Canvas,想做一个数独游戏,查找资料后开始着手实现.途中也遇到几个难点,也都克服了,实现了一个简单的版本,就想把过程写下来.水平有限,代码可能也有不完善的地方. 好了,废话不多说,现在开始 ...

  9. c++数独游戏3.3

    用了制表符来制作框架.对了,先给大家科普一下制表符的寻找方法吧 1.点击软键盘 2. 选择特殊符号 3. 输入制表符 完成!!! 代码 #include<iostream>//输入输出用的 ...

  10. c++数独游戏3.2

    又更新了一下数独 1:增加了计时功能 2:修改了存档功能 代码: #include<iostream> #include<ctime> #include<conio.h& ...

最新文章

  1. java线程状态有哪几种,顺利拿到offer
  2. pyspark AttributeError: 'NoneType' object has no attribute 'setCallSite'
  3. [转]linux 有效用户和实际用户的区别
  4. Firefox for iOS现身Github 使用Swift编写
  5. 没有bug队——加贝——Python 练习实例 11,12
  6. Bzoj2124(p5364): 等差子序列
  7. 医院耗材管理系统开发_11
  8. B站游戏排行榜(No.1竟是‘原神‘)—— B站动态页面爬取
  9. centos7 分辨率修改,CentOS 7 修改屏幕分辨率
  10. 手把手教你破解无线路由器密码
  11. 素数筛法(python实现)
  12. 涨知识丨一看就懂的遥感数据科普,附5个数据集下载资源
  13. 《CSS Secrets》读书笔记(2)
  14. JavaScript 学习中
  15. Anton Paar安东帕密度计比重计维修DMA35性能参数
  16. Xcode 真机调试失败:Errors were encountered while preparing your device for development
  17. 机器学习文章引用参考
  18. 学习Qt使用GDI+绘图笔记
  19. html两个盒子怎么左右对其,多个div两端对齐
  20. 陕西神木市一煤矿发生事故 已致19人死亡

热门文章

  1. smale学习之数学表达式(day2)
  2. python_argparse简介
  3. mysql innodb ibd,mysql innodb 从 ibd 文件恢复表数据
  4. visual studio 2019配置dlib读取jpeg图片
  5. SMOTE(Synthetic Minority Over-Sampling Technique ,即“人工少数类过采样法“)----Python调包简单实现
  6. 文本分类的python实现-基于Xgboost算法
  7. Java多线程系列--“JUC集合”
  8. sqlserver去重记录_SQL去除重复记录(七种)
  9. List常用方法总结
  10. 形参和实参是什么_Java基础篇:什么是面向对象?(详解)