链表-->贪吃蛇--------TO COPY
1 /* 2 贪吃蛇 --->链表 3 */ 4 5 #include "stdio.h" 6 #include "string.h" 7 #include "windows.h" //windows编程头文件 8 #include "time.h" 9 #include "conio.h" //控制台输入输出文件 10 #include "stdbool.h" 11 12 #define up 'w' 13 #define down 's' 14 #define right 'd' 15 #define left 'a' 16 17 void welcome(); // 开始界面 18 void Finish(); // 结束界面 19 void creatgraph(); // 围墙打印 20 void gotoxy(int x, int y); // 光标跳转,横为X 0,1,2.. 21 void gotoprint(int x, int y); // 跳转打印 22 void gotodelete(int x, int y);// 跳转删除 23 void creatfood(); // 食物产生 24 int ClickControl(); // 获取键盘信号 25 int Judge(); // 游戏结束判断 26 void MovingBody(); // 蛇的移动 27 void Eating(); // 蛇吃到东西后的操作(伸长) 28 void ChangeBody(int x, int y); // 蛇的坐标变换 29 30 /*全局变量 + 预处理:*/ 31 typedef struct Snakes { 32 int x; 33 int y; 34 struct Snakes* next; 35 } snake; 36 37 snake* head; // 声明蛇头指针 38 39 // 申明并定义食物 40 struct Food { 41 int x; 42 int y; 43 } food; 44 45 char name[20]; // 保存用户名 有兴趣可以制作登录系统 46 int score = 0; // 分数 47 char click = 1; // 记录敲下的键盘按键 48 int speed; // 速度 其实是延迟的毫秒数 49 50 /************************************************************/ 51 52 int main() { 53 system("color 0B"); // 设置控制台字体颜色 54 welcome(); // 欢迎界面 55 creatgraph(); // 创建地图 56 creatfood(); // 新建食物 57 // 捕获鼠标按键 ClickControl 58 if (ClickControl() == 0) return 0; 59 return 0; 60 } 61 62 /**********************************************************/ 63 void welcome() { 64 system("mode con cols=100 lines=40 "); //cols为控制台的宽度,lines则代表控制台的高度。 65 gotoxy(15, 10); 66 printf("/**********************************************/"); 67 gotoxy(15, 20); 68 printf("/**********************************************/"); 69 gotoxy(20, 13); 70 printf("WELCOME TO THE GAME OF RETRO SNAKE"); 71 gotoxy(14, 16); 72 printf("请在英文输入法中操作,反向移动等同于吃到自己,wasd控制p暂停"); 73 gotoxy(20, 18); 74 printf("PLEASE ENTER YOUR NAME:"); 75 scanf_s("%s", &name, 20); 76 system("cls"); 77 } 78 79 /**********************************************************/ 80 void creatgraph() { 81 int i; 82 /* 83 注意这里横坐标是每次+2 因为控制台字符宽高比为1:2 84 */ 85 for (i = 0; i < 58; i += 2) { 86 gotoprint(i, 0); 87 gotoprint(i, 26); 88 } 89 for (i = 1; i < 26; i++) { 90 gotoprint(0, i); 91 gotoprint(56, i); 92 } 93 gotoxy(63, 10); 94 printf("hello %s,Welcome To Play", name); 95 gotoxy(63, 15); 96 printf("Your Score Is:%d = ̄ω ̄= ", score); 97 gotoxy(63, 20); 98 printf("This Game Is Created By VITO--->TO COPY"); 99 head = (snake*)malloc(sizeof(snake)); 100 snake* p = (snake*)malloc(sizeof(snake)); 101 snake* q = (snake*)malloc(sizeof(snake)); 102 head->x = 16; 103 head->y = 15; 104 p->x = 16; 105 p->y = 16; 106 q->x = 16; 107 q->y = 17; 108 head->next = p; 109 p->next = q; 110 q->next = NULL; 111 } 112 /**********************************************************/ 113 void gotoxy(int x, int y) { 114 // 更新光标位置 115 COORD pos; 116 HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); 117 pos.X = x; 118 pos.Y = y; 119 SetConsoleCursorPosition(hOutput, pos); 120 // 隐藏光标 121 CONSOLE_CURSOR_INFO cursor; 122 cursor.bVisible = FALSE; 123 cursor.dwSize = sizeof(cursor); 124 SetConsoleCursorInfo(hOutput, &cursor); 125 } 126 127 /**********************************************************/ 128 void gotoprint(int x, int y) { 129 gotoxy(x, y); 130 printf("■"); 131 } 132 133 /**********************************************************/ 134 void gotodelete(int x, int y) { 135 gotoxy(x, y); 136 printf(" "); 137 } 138 139 /**********************************************************/ 140 void creatfood() { 141 // 随机产生一个食物 142 bool flag = false; 143 while (!flag) { 144 flag = true; 145 srand((int)time(NULL)); 146 food.y = rand() % (25 - 1 + 1) + 1; 147 food.x = rand() % (54 - 2 + 1) + 2; 148 if (food.x % 2 != 0) { 149 food.x = food.x + 1; 150 } 151 snake* judge = head; 152 while (1) { //遍历排除蛇身重复 153 if (judge->next == NULL) break; 154 if (food.x == judge->x && food.y == judge->y) { 155 flag = false; 156 } 157 judge = judge->next; 158 } 159 } 160 gotoxy(food.x, food.y); 161 printf("⊙"); 162 } 163 164 /**********************************************************/ 165 // 捕获鼠标 游戏主循环 166 int ClickControl() { 167 char c; 168 while (1) { 169 if (Judge() == 0) return 0; 170 if (_kbhit()) { 171 click = _getch(); 172 } 173 MovingBody(); 174 Eating(); 175 } 176 return 1; 177 } 178 179 /**********************************************************/ 180 void MovingBody() { 181 int x = head->x, y = head->y; 182 snake* p = head; 183 // 通过先清空后打印实现动画效果 184 while (p->next != NULL) { 185 p = p->next; 186 } 187 gotodelete(p->x, p->y); // 消除尾节点 188 switch (click) { 189 case up: 190 y -= 1; 191 break; 192 case down: 193 y += 1; 194 break; 195 case left: 196 x -= 2; 197 break; 198 case right: 199 x += 2; 200 break; 201 default: 202 break; 203 } 204 if (x != head->x || y != head->y) { 205 // 改变坐标时更新 暂停游戏停止更新蛇 206 ChangeBody(x, y); 207 } 208 p = head; 209 // 打印蛇头 210 gotoprint(p->x, p->y); 211 // 蛇速度控制 212 int count = score / 10; 213 if (count <= 10) speed = 150; 214 else if (count > 10 && count <= 20) speed = 100; 215 else if (count > 20 && count <= 40) speed = 50; 216 else speed = 10; 217 Sleep(speed); 218 } 219 220 /**********************************************************/ 221 // 吃到食物处理 添加一个尾巴 222 void Eating() { 223 if (head->x == food.x && head->y == food.y) { 224 creatfood(); 225 snake* _new = (snake*)malloc(sizeof(snake)); 226 snake* p; 227 p = head; 228 while (1) { 229 if (p->next == NULL) break; 230 p = p->next; 231 } 232 p->next = _new; 233 _new->next = NULL; 234 score += 10; 235 gotoxy(77, 15); 236 printf("%d", score); 237 } 238 } 239 240 /**********************************************************/ 241 // 更新蛇体坐标 只需要消除尾结点 然后把新坐标结点置为头结点即可 242 void ChangeBody(int x, int y) { 243 snake* p = head; 244 while (p->next->next != NULL) { 245 p = p->next; 246 } 247 free(p->next); 248 p->next = NULL; 249 snake* new_head = (snake*)malloc(sizeof(snake)); 250 new_head->x = x; 251 new_head->y = y; 252 new_head->next = head; 253 head = new_head; 254 } 255 256 /**********************************************************/ 257 // 判断是否游戏结束 258 int Judge() { 259 if (head->x == 0 || head->x == 56 || head->y == 0 || head->y == 26) { 260 Finish(); 261 return 0; 262 } 263 snake* p = head->next; 264 while (1) { 265 if (p == NULL) break; 266 if (head->x == p->x && head->y == p->y) { 267 Finish(); 268 return 0; 269 } 270 p = p->next; 271 } 272 return 1; 273 } 274 275 /**********************************************************/ 276 void Finish() { 277 system("cls"); 278 gotoxy(15, 10); 279 printf("/**********************************************/"); 280 gotoxy(15, 20); 281 printf("/**********************************************/"); 282 gotoxy(18, 14); 283 printf("GAME OVER o(* ̄▽ ̄*)o"); 284 gotoxy(20, 16); 285 printf("Your Score is %d hiahiahia", score); 286 gotoxy(18, 18); 287 printf("还不错哦, 继续努力O(∩_∩)O"); 288 gotoxy(0, 27); 289 // 释放空间 290 snake* p = head, * q; 291 while (p != NULL) { 292 q = p->next; 293 free(p); 294 p = q; 295 } 296 system("pause"); 297 }
#include "stdlib.h" #include "stdio.h" //快速排序和冒泡排序 int numbers [8]= {1000,99,2,44,256,789,3,9}; int sz = sizeof(numbers)/sizeof(numbers[0]); int i,j,t; void buddleSort(int arr[],int arr_sz); void swap(int *x, int *y); void printfArr(int arr[],int x); void quick_sort_recursive(int arr[], int start, int end); void quick_sort(int arr[], int len); int main() { //buddleSort(numbers,sz); quick_sort(numbers,sz); printfArr(numbers,sz); return 0; } //冒泡排序 void buddleSort(int arr[],int arr_sz) { for(i = 0; i< arr_sz-1; i++) { // n个数 n-1趟 for(j=0; j< arr_sz-i-1; j++) { if(arr[j]>arr[j+1]) { t = arr[j]; arr[j] = arr[j+1]; arr[j+1] = t; } } } } //&代表取x地址,*代表指针运算,*&x和x在引用时是等价的.*和&是互逆运算. //int *a = &b; 是一个返回值为int型指针的函数的声明 void swap(int *x, int *y) { int t = *x; *x = *y; *y = t; } //-- 去重 : 判断a[i] 与a[i-1]的数据是否相同,相同则不输出,不同则输出 //快速排序 void quick_sort_recursive(int arr[], int start, int end) { if (start >= end) return; int mid = arr[end]; int left = start, right = end - 1; while (left < right) { while (arr[left] < mid && left < right) left++; while (arr[right] >= mid && left < right) right--; swap(&arr[left], &arr[right]); } //交换基准值 if (arr[left] >= arr[end]) swap(&arr[left], &arr[end]); else left++; //递归 if (left) quick_sort_recursive(arr, start, left - 1); quick_sort_recursive(arr, left + 1, end); } void quick_sort(int arr[], int len) { quick_sort_recursive(arr, 0, len - 1); } void printfArr(int arr[],int x) { for(i =0 ; i<x; i++) { printf("%d-->",arr[i]); }