第二把数独游戏 代码
/**************************************************** 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
第二把数独游戏 代码相关推荐
- Linux数独小游戏C语言,发一个自己制作的数独游戏代码!
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 void draw(int i,int j) {setcolor(5); rectangle(45+j*30,45+i*30,36+(j+1)*30,36 ...
- 【第二十三题】带旋转的数独游戏|dfs(北理工/北京理工大学/程序设计方法与实践/小学期 )
目录 前言 dfs学习 思路 代码修正 源代码 我修正后的代码 前言 说实话这题我弄的也不是很明白,而csdn上只有一份代码@loveumozart,还没多少注释,关键还有很多冗余代码,于是我就做 ...
- [WebAssembly 入门] 实现数独游戏 - 如何优雅的组织Rust代码
title: [WebAssembly 入门] 实现数独游戏 - 如何优雅的组织Rust代码 date: 2018-4-23 22:55:00 categories: WebAssembly, 笔记 ...
- python数独游戏源代码100行_python实现解数独程序代码
偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...
- Python游戏项目:69行代码编写记忆数独游戏
2019独角兽企业重金招聘Python工程师标准>>> 前言 freegames是Apache2许可的免费Python游戏集合,旨在用于教育和娱乐,完全是开源的,我们只要引用编写就好 ...
- 数独游戏完整java代码_Java实现蓝桥杯数独游戏的示例代码
你一定听说过"数独"游戏. 如图,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个同色九宫内的数字均含1-9,不重复. 数独的答案都是唯一 ...
- ACM之八数码问题----BFS搜索----数独游戏的模拟(下)
题目描述;数独游戏的内核代码 八数码问题; 编号为1到8的8个正方形滑块被摆成3行3列;(有一个格子留空); 每次可以把与空格相邻的滑块(有公共边才算相邻)移到空格中; 而它原来的位置就成为了新的空格 ...
- HTML5 Canvas制作数独游戏(一)
初次接触Canvas,想做一个数独游戏,查找资料后开始着手实现.途中也遇到几个难点,也都克服了,实现了一个简单的版本,就想把过程写下来.水平有限,代码可能也有不完善的地方. 好了,废话不多说,现在开始 ...
- c++数独游戏3.3
用了制表符来制作框架.对了,先给大家科普一下制表符的寻找方法吧 1.点击软键盘 2. 选择特殊符号 3. 输入制表符 完成!!! 代码 #include<iostream>//输入输出用的 ...
- c++数独游戏3.2
又更新了一下数独 1:增加了计时功能 2:修改了存档功能 代码: #include<iostream> #include<ctime> #include<conio.h& ...
最新文章
- java线程状态有哪几种,顺利拿到offer
- pyspark AttributeError: 'NoneType' object has no attribute 'setCallSite'
- [转]linux 有效用户和实际用户的区别
- Firefox for iOS现身Github 使用Swift编写
- 没有bug队——加贝——Python 练习实例 11,12
- Bzoj2124(p5364): 等差子序列
- 医院耗材管理系统开发_11
- B站游戏排行榜(No.1竟是‘原神‘)—— B站动态页面爬取
- centos7 分辨率修改,CentOS 7 修改屏幕分辨率
- 手把手教你破解无线路由器密码
- 素数筛法(python实现)
- 涨知识丨一看就懂的遥感数据科普,附5个数据集下载资源
- 《CSS Secrets》读书笔记(2)
- JavaScript 学习中
- Anton Paar安东帕密度计比重计维修DMA35性能参数
- Xcode 真机调试失败:Errors were encountered while preparing your device for development
- 机器学习文章引用参考
- 学习Qt使用GDI+绘图笔记
- html两个盒子怎么左右对其,多个div两端对齐
- 陕西神木市一煤矿发生事故 已致19人死亡
热门文章
- smale学习之数学表达式(day2)
- python_argparse简介
- mysql innodb ibd,mysql innodb 从 ibd 文件恢复表数据
- visual studio 2019配置dlib读取jpeg图片
- SMOTE(Synthetic Minority Over-Sampling Technique ,即“人工少数类过采样法“)----Python调包简单实现
- 文本分类的python实现-基于Xgboost算法
- Java多线程系列--“JUC集合”
- sqlserver去重记录_SQL去除重复记录(七种)
- List常用方法总结
- 形参和实参是什么_Java基础篇:什么是面向对象?(详解)