谁能帮忙写一个c语言连连看游戏,要4x4的,功能最简单的就可以!但是要实现连连看应该有的功能

作者&投稿:暴映 (若有异议请与网页底部的电邮联系)
急需一个用C语言编写的 连连看游戏 代码啊,需要简易一点的,适合刚入门新手看懂的~

你这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=...

五峰土家族自治县19274502139: C语言连连看 -
徵克复方: 这里有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> ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网