谁能帮忙写一个c语言连连看游戏,要4x4的,功能最简单的就可以!但是要实现连连看应该有的功能
你这10财富也太少了,这种范式代码很多好吧 自己百度下 一搜一大堆
774701973@qq.com 快点 啊
刚写的,新鲜出炉:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define MAPSIZE 4
#define MAXLINESIZE 60
//typedef enum{false,true} bool;
typedef struct{
int x,y;
}Point;
const char pictureTable[]={" ABCEDFGHI"};
bool judgeLine(char **MP,Point *start,Point *end){
int i;
if(start->x==end->x){
if(start->y > end->y){
for(i = start->y - 1 ; i > end->y ; i--)
if(MP[start->x][i]!=0)
return false;
return true;
}
else{
for(i = start->y + 1 ; i < end->y ; i++)
if(MP[start->x][i]!=0)
return false;
return true;
}
}
else if(start->y==end->y){
if(start->x > end->x ){
for(i = start->x - 1 ; i > end->x ; i--)
if(MP[i][start->y]!=0)
return false;
return true;
}
else{
for(i = start->x + 1 ; i < end->x ; i++)
if(MP[i][start->y]!=0)
return false;
return true;
}
}
return false;
}
bool judgeTwoLines(char **MP,Point *start,Point *end,Point *mid){
Point p1,p2;
mid->x=-1;
mid->y=-1;
if(judgeLine(MP,start,end)==true) return true;
p1.x=start->x;
p1.y=end->y;
p2.x=end->x;
p2.y=start->y;
mid->x=p1.x;
mid->y=p1.y;
if(MP[p1.x][p1.y]==0 && judgeLine(MP,start,&p1) && judgeLine(MP,end,&p1)) return true;
mid->x=p2.x;
mid->y=p2.y;
if(MP[p2.x][p2.y]==0 && judgeLine(MP,start,&p2) && judgeLine(MP,end,&p2)) return true;
return false;
}
bool judgeTreeLines(char **MP,Point *start,Point *end,Point *mid1,Point *mid2,int n){
int i;
mid1->x=-1;mid1->y=-1;
mid2->x=-1;mid2->y=-1;
if(judgeTwoLines(MP,start,end,mid1)) return true;
for( i=start->x - 1;i>=0;i--){
if(MP[i][start->y]!=0) break;
mid1->x=i;
mid1->y=start->y;
if(judgeTwoLines(MP,mid1,end,mid2)) return true;
}
for( i=start->x + 1;i<=n+1;i++){
if(MP[i][start->y]!=0) break;
mid1->x=i;
mid1->y=start->y;
if(judgeTwoLines(MP,mid1,end,mid2)) return true;
}
for( i=start->y - 1;i>=0;i--){
if(MP[start->x][i]!=0) break;
mid1->x=start->x;
mid1->y=i;
if(judgeTwoLines(MP,mid1,end,mid2)) return true;
}
for( i=start->y + 1;i<=n+1;i++){
if(MP[start->x][i]!=0) break;
mid1->x=start->x;
mid1->y=i;
if(judgeTwoLines(MP,mid1,end,mid2)) return true;
}
return false;
}
void ptMap(char **MP,int n){
int space=(MAXLINESIZE-n*2)/2;
int i,j;
for(i=0;i<(MAXLINESIZE-10)/2;i++)
printf(" ");
printf("《连连看》
");
for(i=2;i<space;i++) printf(" ");
printf("x
");
for(i=1;i<=n;i++){
for(j=2;j<space;j++)
printf(" ");
printf("%d ",i);
for(j=1;j<=n;j++)
printf("%c ",pictureTable[MP[i][j]]);
printf("
");
}
for(i=0;i<space;i++)
printf("*");
for(i=0;i<n;i++)
printf("%d*",i+1);
for(i=1;i<space;i++)
printf("*");
printf("
");
}
char **createMap(int n){
char **ret;
int i;
ret=(char**)malloc(sizeof(char*)*(n+2));
for(i=0;i<n+2;i++)
ret[i]=(char*)malloc(sizeof(char)*(n+2));
return ret;
}
void ranMap(char **MP,int n){
int *all=(int*)malloc(sizeof(int)*n*n);
int i,tmpi,tmp;
for(i=0;i<n*n;i++)
all[i]=i/4+1;
for(i=0;i<n*n;i++){
tmpi=rand()%(n*n-i);
tmp=all[tmpi];
all[tmpi]=all[n*n-i-1];
all[n*n-i-1]=tmp;
}
for(i=0;i<n+2;i++){
MP[0][i]=0;
MP[n+1][i]=0;
MP[i][0]=0;
MP[i][n+1]=0;
}
tmpi=0;
for(i=1;i<=n;i++)
for(tmp=1;tmp<=n;tmp++)
MP[i][tmp]=all[tmpi++];
}
void deletePoints(char **MP,Point *p1,Point *p2){
MP[p1->x][p1->y]=0;
MP[p2->x][p2->y]=0;
}
int playTurns(int n){
int rest=n*n;
char **mp=createMap(n),c;
ranMap(mp,n);
Point mid1,mid2,pt1,pt2;
while(1){
ptMap(mp,n);
printf("请输入消去的坐标1(x1 y1):
");
scanf("%d%d",&pt1.x,&pt1.y);
printf("请输入消去的坐标2(x2 y2):
");
scanf("%d%d",&pt2.x,&pt2.y);
if((pt1.x==pt2.x && pt1.y==pt2.y) || (pt1.x<1 || pt1.x>n || pt2.x < 1 || pt2.x > n || pt1.y<1 || pt1.y>n || pt2.y < 1 || pt2.y > n)){
printf("无法消除这两图案,请再次检查。");
}
else if(mp[pt1.x][pt1.y]!=0 && mp[pt1.x][pt1.y]==mp[pt2.x][pt2.y] && judgeTreeLines(mp,&pt1,&pt2,&mid1,&mid2,n)){
if(mid1.x==-1){
printf("Direct
");
}
else if(mid2.x==-1){
printf("TwoLines :(%d,%d)
",mid1.x,mid1.y);
}
else{
printf("TreeLines:(%d,%d)(%d,%d)
",mid1.x,mid1.y,mid2.x,mid2.y);
}
deletePoints(mp,&pt1,&pt2);
printf("消去成功!
");
rest-=2;
if(rest==0){
printf("恭喜!你已消去所有图案!
");
break;
}
}
else{
printf("无法消除这两图案,请再次检查。");
}
printf("继续游戏(N/n不继续)?");
scanf(" %c",&c);
if(c=='N' || c=='n') break;
}
printf("是否重新开局(Y/y继续)?");
scanf(" %c",&c);
if(c=='y' || c=='Y') return 1;
return 0;
}
int main(){
srand(time(0));
while(playTurns(4));
return 0;
}
////
// 简单连连看游戏
//
//
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ROW 4 //行数目
#define COL 4
#define ICO_NUM 5
//游戏图标
const char ico[ICO_NUM] = "@#$& ";
char games[ROW][COL] = {0};
//初始化数据
void init_game(void)
{
int i, j;
for(i = 0; i < ROW; i++)
{
for(j = 0; j < COL; j++)
{
games[i][j] = rand() % (ICO_NUM - 1); //不能为空白
if()
}
}
}
//绘制游戏
void draw_game(void)
{
int i, j;
printf("(连连看)
");
printf("=x= =0==1==2==3==4==5==6==7==8==9=
");
for(i = 0; i < ROW; i++)
{
printf("=%d= ", i);
for(j = 0; j < COL; j++)
{
printf(" %c ", ico[games[i][j]]);
}
printf("
");
}
printf("== y=0==1==2==3==4==5==6==7==8==9=
");
}
//运行游戏
void run_game(void)
{
//坐标从0开始
int x1 = -1, y1 = -1,
x2 = -1, y2 = -1;
int num = 0;
char c = 0;
while(1)
{
//初始化数据
init_game();
while(1)
{
//绘制游戏
draw_game();
while(1)
{
printf("请输入要消除的坐标1(x1 y1):
");
scanf("%d%d", &x1, &y1);
if(x1 < 0 || x1 >= ROW)
{
printf("x1输入有误,请从新输入:(0 <= x1 <= %d)
",
ROW);
}
else if(y1 < 0 || y1 >= COL)
{
printf("y1输入有误,请从新输入:(0 <= y1 <= %d)
",
COL);
}
else
{
printf(" (%d, %d):%c
",x1, y1, ico[games[x1][y1]]);
break;
}
}
while(1)
{
printf("请输入要消除的坐标2(x2 y2):
");
scanf("%d%d", &x2, &y2);
if(x2 < 0 || x2 >= ROW)
{
printf("x2输入有误,请从新输入:(0 <= x2 <= %d)
",
ROW);
}
else if(y2 < 0 || y2 >= COL)
{
printf("y2输入有误,请从新输入:(0 <= y2 <= %d)
",
COL);
}
else
{
printf(" (%d, %d):%c
",x2, y2, ico[games[x2][y2]]);
break;
}
}
if(games[x1][y1] == games[x2][y2])
{
printf("%c <---消除成功--->%c
", ico[games[x1][y1]],
ico[games[x2][y2]]);
games[x1][y1] = ICO_NUM - 1;
games[x2][y2] = ICO_NUM - 1;
num++;
if(num >= (ROW * COL)/2)
{
printf("恭喜你获得胜利~
");
break;
}
}
else
{
printf("%c <---消除失败!--->%c
", ico[games[x1][y1]],
ico[games[x2][y2]]);
}
}
printf("是否再来一局?(Y/N)
");
scanf("%c", &c);
if(c == 'N' || c == 'n')
break;
}
}
int main(void)
{
//运行游戏
run_game();
return 0;
}
// Check if the write concern could not be fulfilled
if ($writeConcernError = $result->getWriteConcernError()) {
printf("%s (%d): %s\n",
$writeConcernError->getMessage(),
$writeConcernError->getCode(),
var_export($writeConcernError->getInfo(), true)
);
}
// Check if any write operations did not complete at all
foreach ($result->getWriteErrors() as $writeError) {
printf("Operation#%d: %s (%d)\n",
$writeError->getIndex(),
$writeError->getMessage(),
$writeError->getCode()
);
}
} catch (MongoDB\Driver\Exception\Exception $e) {
printf("Other error: %s\n", $e->getMessage());
exit;
}
帮忙写一个c语言程序,作用是写一个分割文件的程序,原文件太大,无法装的...
include <stdio.h>#include <string.h>#define TARGET_SIZE (100*1024*1024) \/\/分割为100M一个文件int main(){ char name[100]; FILE *in, *out; char target[100]; int cnt=1,c, n=0; printf("input source file name and path:"); gets(name); in = fope...
编写C语言程序,把一个数组按从小到大的次序排列起来
if (number[j] > number[j + 1])\/\/比较大小并将小的赋给前面的数组 { k = number[j];\/\/将相对较大的元素赋值给中间元素 number[j] = number[j + 1];\/\/将相对较小的元素送达前面一个位置 number[j + 1] = k;\/\/将中间变量元素送给后面一个位置 } if (New_number[j] < New_...
帮忙写一下C语言代码
include<stdio.h>int main( ){ int n1,n2,a,b,c; scanf("%d%d",&a,&b); if(a>=b){ n1=a;n2=b;} else{ n1=b;n2=a;} while(n2>0) { c=n1%n2; n1=n2; n2=c; } printf("最小公倍数:%d\\n",a*b\/n1); printf("最大公因数:...
求c语言大佬帮助!帮我写个小程序,谢谢
int n);\/\/在屏幕上输出数组各元素的值(逗号分隔)#define N (10)int main(){ int a[N],b[N],c[N*2],i; srand(time(NULL)); Init(a,N); Print(a,N); Short(a,N); Print(a,N); Init(b,N); Print(b,N); Short(...
求大神帮忙,用c语言写一个程序。
include <stdio.h>int main(){ float r; float c,s; scanf("%f",&r); c=2*3.14*r; s=3.14*r*r; printf("%f %f\\n", c,s); return 0;}
C语言 编写一个程序,输入一个正整数,求出它是几位数。
求一个正整数n的位数可以先定义一个变量num,并初始化为0,依次把该整数n除以10,直到其为0为止,并且每除一次10,变量num的个数就自加1,最后num的值就是该整数n的位数。include <stdio.h> int main(){ int n,num=0;scanf("%d",&n);while(n){ num++;n\/=10;} printf("%d\\n",num)...
谁能用C语言给我写一个可以计算加减乘除的程序(只用算整数就OK)_百度...
int main(){ int a,b,result;char operator ;printf("请输入两个数,输入的两个数用空格分隔\\n");scaf("%d %d",&a,&b);printf("请指定你要输入的运算+或1表示加,-或2表示减,*或3表示乘,\/或4表示除!\\n") ;scanf("%c",&operator) ;switch operator { case ‘1’:‘+’result...
用C语言写一段程序,高手快来哦!
nEnd=nMiddle-1;else nStart=nMiddle+1;} return -1;} int main(void){ int x[RANGE], y = 0, i = 0;printf("请输入%d个整数:", RANGE);for(i = 0; i< RANGE; i++) scanf("%d", x + i);sort(x);printf("排序后为:\\n");for(i = 0; i < RANGE; i++) printf...
C语言编写一个程序,实现如下功能:从键盘输入一个三位数,求各位数字之...
include "stdio.h"void main(){ int n,sum=0;printf("请输入一个三位数:");scanf("%d",&n);sum=n\/100+n%100\/10+n%10;\/\/百位数+十位数+个位数 printf("这个三位数各位数字之和是%d\\n",sum);} 结果:
帮忙写一个C语言的编程:求一元二次方程的根
假设方程为a*x*x+b*x+c=0,看看我给的程序有没有什么问题:include "stdio.h"include "math.h"void main(){ float a , b , c , ds , x1 , x 2;printf("enter a,b,c:");scanf("%f,%f,%f",&a,&b,&c);ds = b*b-4*a*c;if(ds<0) printf("erro!!!");else if(ds=...
徵克复方: 这里有VC2008的SDK连连看,我哥们这几天刚写的... 不过已经从最早的符合你的要求复杂到使用贴图,加了声音了. 而且支持自定义地图了... 实在懒得改回你要的那种程度了...总体来说不是很麻烦...
五峰土家族自治县19274502139: 求一连连看算法 C 语言 - ?
徵克复方: 第一个: bool isClear(int row1,int col1,int row2,int col2) {int row,col;for(row=1;row<=ROW;row++)if( check_point(row,col1) && check_point(row,col2) )if( check_col(col1,row1,row) && check_row(row,col1,col2)&& check_col(col2,row2,row) )...
五峰土家族自治县19274502139: c语言连连看课程设计求代码 - ?
徵克复方: 一个矩阵,随机产生字符布置地图
五峰土家族自治县19274502139: 我要一个用c语言做连连看(有图片),怎样生成地图,怎样实现算法. - ?
徵克复方: 太麻烦了,要调用Windows API .估计一天都不一定能搞定.用MFC .net 估计都没人帮你做.生成地图你可以将 每种图片的数量保存好 比如 苹果用 1表示 西瓜用2 表示 ,可以弄一个链表,方便删除, 生成地图时随机一个数,到链表里取出,然后在从连表里删除.判断的话 你可以将 地图在加大一格(不显示),然后用类似寻路算法来做.我没实践过,你可以试试.
五峰土家族自治县19274502139: 怎么样用C语言编写一个小的游戏程序?老师留的作业,连连看那种超级简单就行! - ?
徵克复方: 试试这个.贪食蛇http://hi.baidu.com/15574016362/blog/item/812db4d12f091519a18bb7f6.html
五峰土家族自治县19274502139: 想用C++写一个连连看的小游戏,求思路 - ?
徵克复方: 一下是我的思路 我也是菜鸟 愿交流1.用一个线程来专门负责刷帧 (就是定时重绘界面)2.用一个数组来存储游戏的数据 3.从数组来绘制画面4.从用户输入 改变 数组 类的话应该有 GameView ---用于负责怎个游戏的绘制 里面新建线程刷帧 GameData ---用于存储游戏数据 和 改变数据 GameContrl ---由于接受用户输入 Game ---控制怎个游戏
五峰土家族自治县19274502139: C语言用ege图形库做了一个连连看游戏,想让他暂停时弹出一个小的窗口,怎么实现? - ?
徵克复方: 写一个类似于sleep函数的停止线程函数. 在执行调用该函数时候弹出一个窗口.
五峰土家族自治县19274502139: 求连连看游戏寻路算法c/c++?
徵克复方: 连连看核心算法如下: #include <iostream> using namespace std; int board[102][102]; int nRowCount, nColCount; bool isHorizontalLineValid(int c1, int c2, int r) { if(c1>c2) // 交换 C1, C2 { c1 ^= c2 ^= c1 ^= c2; } for(int i=c1+1; i<=c2-1; i++) { if(...
五峰土家族自治县19274502139: 怎样做一个电脑上运行的连连看 - ?
徵克复方: 如果用C++的话,学一点简单的Win32编程,使用gdi函数绘制就可以了,逻辑很简单,楼主自己先研究一下,遇到具体问题可以再问我
五峰土家族自治县19274502139: 用C语言编写一个猜数字游戏的程序(要能运行的,求大神们帮忙啊) - ?
徵克复方: #include<stdio.h> #incude<stdlib.h> #include<time.h> #include<conio.h> int main(){ srand(time(0)); //定义随机种子 int a= 0,b=0,c=1; a = rand()%101; printf("数字已经选好,开始猜吧:"); for(;;c++){ scanf("%d",&b); //输入猜的数 if(b> ...