基于EasyX图形库的C/C++实战项目——西南大学大一C语言程序设计|课程设计《多功能应用平台》
目录
一、扫雷
二、迷宫
三、通讯录
四、核心代码
一、扫雷
功能简介:1. 棋盘设置 2. 设置模式 3. 红旗标志 4. 递归展开(DFS)
扫雷
二、迷宫
功能介绍: 1. 二维矩阵设置 2. 键盘输入 3. 自动求解(回溯)
迷宫
三、通讯录
功能介绍:1. 设计模板 2. 添加、删除、查找 3. 文件操作 4. 用户栏信息展开 5. 排序与优化
可视化通讯录
四、核心代码
1. Interface.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#undef UNICODE
#undef _UNICODE#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <easyx.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <graphics.h>
#include <windows.h>
#include <unordered_map>
#include <string>
#include <stack>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;//1. Minesweeper
#define ROW 10
#define COL 10
#define ROWS ROW+2
#define COLS COL+2
#define MODE_EAZY 10
#define MODE_MID 15
#define MODE_HARD 20void InitBoard(char Board[ROWS][COLS], int rows, int cols, int set);
void SetBoard(char Board[ROWS][COLS], int row, int col, int mode);
void StartToPlay(char inBoard[ROWS][COLS], char outBoard[ROWS][COLS], int row, int col, int mode, int* keep_playing);//2. Mazegame
#define mROW 21
#define mCOL 29
void MazeGame();//3. Contact
#define NAME_MAX 16
#define SEX_MAX 8
#define ADD_MAX 16
#define TELE_MAX 16
#define KEY_MAX 16
#define CON_MAX 32
#define AVA_MAX 32typedef struct PeoInfo //通过学号定位
{long long stu_number; //学号char name[NAME_MAX];char key[KEY_MAX]; //密码int age;char sex[SEX_MAX];char address[ADD_MAX];char tele[TELE_MAX];char contact[CON_MAX]; //该学生的通讯录char avatar[AVA_MAX]; //头像
}IP;void ContactInter(IP info, unordered_map<long long, IP> ID, long long* saveId);//基于map的所有用户管理
void LoadStudentsID(unordered_map<long long, IP>& ID);
void SaveStudentsID(long long* id, IP* info);
void DelstudentsID(long long del);
2.Minesweeper.cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include "Interface.h"void InitBoard(char Board[ROWS][COLS], int rows, int cols, int set) {for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {Board[i][j] = set;}}
}//踩雷之后展示整个棋盘
void DisPlayBoardGra(char Board[ROWS][COLS], int r, int c) {for (int i = 1; i < ROWS-1; i++) {for (int j = 1; j < COLS-1; j++) { if (i == r && j == c) continue;if (Board[i][j] - '0' == 1) {IMAGE bomb;loadimage(&bomb, "image_minesweeper\\bomb.jpg");putimage(100 + (j - 1) * 40, 100 + (i - 1) * 40, &bomb);}else {IMAGE blank2;loadimage(&blank2, "image_minesweeper\\blank.jpg");putimage(100 + (j - 1) * 40, 100 + (i - 1) * 40, &blank2);}Sleep(75); }}
}//随机放置mode个数的雷到底层棋盘中
void SetBoard(char Board[ROWS][COLS], int row, int col, int mode){int count = mode;while (count){int x = rand() % row + 1;int y = rand() % col + 1;if (Board[x][y] != '1'){Board[x][y] = '1';count--;}}
}//计算周围雷的数量
int Count(char inBoard[ROWS][COLS], int x, int y){return (inBoard[x - 1][y - 1] + inBoard[x - 1][y] + inBoard[x][y - 1] +inBoard[x + 1][y - 1] + inBoard[x + 1][y] + inBoard[x + 1][y + 1] +inBoard[x][y + 1] + inBoard[x - 1][y + 1] - 8 * '0');
}void LookForRay(char inBoard[ROWS][COLS], char outBoard[ROWS][COLS], int x, int y, int* win){if (outBoard[x][y] == 'F') return; //递归到红旗返回if (inBoard[x][y] == '0')*win -= 1; //记录winchar sum = Count(inBoard, x, y); //计算周围雷的个数:越界问题?outBoard[x][y] = sum + '0';//显示该点周围雷的个数char sum_str[30];sprintf(sum_str, "image_minesweeper\\%d.jpg", sum); // 用sprintf合并字符串,通过文件相对位置找到对应图片IMAGE number;loadimage(&number, sum_str);putimage(100 + (y - 1) * 40, 100 + (x - 1) * 40, &number);//该坐标周围没有雷,想周围递归if (outBoard[x][y] == '0'){IMAGE blank;loadimage(&blank, "image_minesweeper\\blank.jpg");putimage(100 + (y - 1) * 40, 100 + (x - 1) * 40, &blank);if (x - 1 >= 1 && x - 1 <= ROW && y - 1 >= 1 && y - 1 <= COL && outBoard[x - 1][y - 1] == '*') //递归条件:递归坐标未被排点,LookForRay(inBoard, outBoard, x - 1, y - 1, win); //win为地址if (x - 1 >= 1 && x - 1 <= ROW && y >= 1 && y <= COL && outBoard[x - 1][y] == '*')LookForRay(inBoard, outBoard, x - 1, y, win);if (x - 1 >= 1 && x - 1 <= ROW && y + 1 >= 1 && y + 1 <= COL && outBoard[x - 1][y + 1] == '*')LookForRay(inBoard, outBoard, x - 1, y + 1, win);if (x >= 1 && x <= ROW && y - 1 >= 1 && y - 1 <= COL && outBoard[x][y - 1] == '*')LookForRay(inBoard, outBoard, x, y - 1, win);if (x >= 1 && x <= ROW && y + 1 >= 1 && y + 1 <= COL && outBoard[x][y + 1] == '*')LookForRay(inBoard, outBoard, x, y + 1, win);if (x + 1 >= 1 && x + 1 <= ROW && y - 1 >= 1 && y - 1 <= COL && outBoard[x + 1][y - 1] == '*')LookForRay(inBoard, outBoard, x + 1, y - 1, win);if (x + 1 >= 1 && x + 1 <= ROW && y >= 1 && y <= COL && outBoard[x + 1][y] == '*')LookForRay(inBoard, outBoard, x + 1, y, win);if (x + 1 >= 1 && x + 1 <= ROW && y + 1 >= 1 && y + 1 <= COL && outBoard[x + 1][y + 1] == '*')LookForRay(inBoard, outBoard, x + 1, y + 1, win);}
}void StartToPlay(char inBoard[ROWS][COLS], char outBoard[ROWS][COLS], int row, int col, int mode, int* keep_playing){int r = 0;int c = 0;int win = row * col - mode; //当win等于0时,即剩下的格子全是雷时,判断胜利bool die = false;//
基于EasyX图形库的C/C++实战项目——西南大学大一C语言程序设计|课程设计《多功能应用平台》相关推荐
- C语言链表学生成绩制作成链表,C语言程序设计课程设计基于链表的学生成绩管理系统.doc...
C语言程序设计课程设计基于链表的学生成绩管理系统 华北科技学院计算机系综合性实验报告 PAGE 第 PAGE 10 页 华北科技学院计算机系综合性实验 实 验 报 告 课程名称 C语言程序设计 实验学 ...
- 基于链表的学生成绩最高分计算问题计算用c语言编写课程设计,C语言程序设计课程设计-基于链表的学生成绩管理系统.doc...
xh,p->xm,p->gs,p->yy,p->wl); p=p->next; } fclose(fp); printf("保存结束按任意键继续\n" ...
- C语言程序项目计划书,(C语言程序设计课程设计计划书.doc
(C语言程序设计课程设计计划书 C语言程序设计课程设计计划书 一.目的 1.熟悉并掌握C语言程序设计的基本方法与技能. 2.掌握利用递归进行程序设计的方法. 3.掌握对随机事件进行全程模拟的基本方法. ...
- 教育技术学习《基于 CPS 模型的翻转课堂教学模式构建——以“JAVA 语言程序设计”课程为例》笔记
作者河南师范大学叶海智教授2016现代教育技术 本文中提到的CPS即创造性问题解决的英文首字母,是美国学者帕恩斯1981年文章提出的.是这样,不要因为感觉自己教育学的概念不深入就敢去应用,或者太老了怕 ...
- 用easyx画电子钟_基于EasyX图形库的多线程绘图应用
本文<基于EasyX图形库的多线程绘图应用>由手机部落整理,仅供参考.如果觉得很不错,欢迎点评和分享-感谢你的阅读与支持! 张煜昕 摘要:EasyX 是C++语言进行图形化编程和游戏编程的 ...
- 大型ERP实战项目教程-任亮-专题视频课程
大型ERP实战项目教程-11719人已学习 课程介绍 通过本ERP项目的学习,可以使学生形成开发的思想,产生真正的动手开发的能力,本项目是原公司的真实项目,如果你没有经验,那么学习这个 ...
- 大一上学期C++课程设计——学生成绩管理系统(QT项目)
这里是一个大一的萌新!仅做学习分享 工程文件在评论区置顶!! 近期整理了一下大一上学期的课程设计报告作为学习总结,使用的软件是Qt Creator,主界面效果如下图 ----------以下为课程设计 ...
- c语言cdio案例,基于CDIO-OBE工程教育模式的C语言程序设计课程教学改革研究
任顺 摘 要:针对物联网工程专业C语言程序设计课程教学中存在的不足,结合CDIO工程教育和OBE教育模式,开展教学改革研究.从夯实基础能力和激发创新能力两方面着手,重点阐述了C语言程序设计课程教学改革 ...
- c语言教学理念和思路,基于CDIO教育理念的C语言程序设计课程教学改革.doc
基于CDIO教育理念的C语言程序设计课程教学改革 [摘要]C语言程序设计是一门实践性很强的课程,但目前该课程的教学环节存在实践教学相对薄弱等弊端.本文结合我院教学改革,尝试将CDIO工程教育理念应用于 ...
最新文章
- 比特币现金(BCH)将在2018年占据主导地位
- [转]程序员生涯总结
- VTK:图片之DrawShapes
- atan与atan2的区别
- 2016/11/10 kettle概述
- 解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
- 趣谈 | Python为什么受欢迎的本质,知道的人寥寥无几?
- 使用Arrays sort 方法進行排序
- python对文件操作的统一步骤_基于Python实现对各种数据文件的操作
- 突发!ARM中国区执行董事长兼CEO被免职
- Android汉字按拼音首字母查询
- yml转换html,properties转换yml格式
- maxscale mysql5.7_Centos7安装maxscale 实现mysql的读写分离
- 教育培训机构小程序开发需求有哪些?
- IntelliJ IDEA使用记录:maven projects-compile提示【**类,找不到符号】
- 电路设计之8:MOS管驱动设计
- 程序员能找到对象吗?|猿代码科技
- 【金融大屏项目】—— Echarts水滴图(echarts-liquidfill)
- VMware VCP认证常见问答题
- USB调试时出现“because an app is obscuring a permission request settings cab't verify your resonse”问题
热门文章