求助啊,谁有有趣的c语言小程序,并且要有源代码!!

求助啊,谁有有趣的c语言小程序,并且要有源代码!!,第1张

学习“推箱子”C语言编码:

#include <stdio.h>

#include <conio.h>

#include<stdlib.h>

#include<windows.h>

int m =0  //m代表第几关

struct maps{short a[9][11]}

struct maps map[5]={ 0,0,0,0,0,0,0,0,0,0,0,  //共5关,每关9行

              0,1,1,1,1,1,1,1,0,0,0,

              0,1,0,0,0,0,0,1,1,1,0,

              1,1,4,1,1,1,0,0,0,1,0,  //0空地,1墙

               1,5,0,0,4,0,0,4,0,1,0,  //4是箱子,5是人

              1,0,3,3,1,0,4,0,1,1,0,  //3是目的地

              1,1,3,3,1,0,0,0,1,0,0,  //7是箱子在目的地(4+3)

              0,1,1,1,1,1,1,1,1,0,0,  //8是人在目的地(5+3)

                0,0,0,0,0,0,0,0,0,0,0,

                0,0,0,0,0,0,0,0,0,0,0,

              0,0,1,1,1,1,0,0,0,0,0,

              0,0,1,5,0,1,1,1,0,0,0,

              0,0,1,0,4,0,0,1,0,0,0,

               0,1,1,1,0,1,0,1,1,0,0,

              0,1,3,1,0,1,0,0,1,0,0,

              0,1,3,4,0,0,1,0,1,0,0,

              0,1,3,0,0,0,4,0,1,0,0,

                0,1,1,1,1,1,1,1,1,0,0,

                0,0,0,0,0,0,0,0,0,0,0,

              0,0,0,1,1,1,1,1,1,1,0,

              0,0,1,1,0,0,1,0,5,1,0,

              0,0,1,0,0,0,1,0,0,1,0,

               0,0,1,4,0,4,0,4,0,1,0,

              0,0,1,0,4,1,1,0,0,1,0,

              1,1,1,0,4,0,1,0,1,1,0,

              1,3,3,3,3,3,0,0,1,0,0,

                1,1,1,1,1,1,1,1,1,0,0,

                0,1,1,1,1,1,1,1,1,1,0,

              0,1,0,0,1,1,0,0,0,1,0,

              0,1,0,0,0,4,0,0,0,1,0,

              0,1,4,0,1,1,1,0,4,1,0,

               0,1,0,1,3,3,3,1,0,1,0,

              1,1,0,1,3,3,3,1,0,1,1,

              1,0,4,0,0,4,0,0,4,0,1,

              1,0,0,0,0,0,1,0,5,0,1,

                1,1,1,1,1,1,1,1,1,1,1,

                0,0,0,0,0,0,0,0,0,0,0,

              0,0,0,1,1,1,1,1,1,0,0,

              0,1,1,1,0,0,0,0,1,0,0,

              1,1,3,0,4,1,1,0,1,1,0,

               1,3,3,4,0,4,0,0,5,1,0,

              1,3,3,0,4,0,4,0,1,1,0,

              1,1,1,1,1,1,0,0,1,0,0,

              0,0,0,0,0,1,1,1,1,0,0,

                0,0,0,0,0,0,0,0,0,0,0 }

void DrMap( )  //绘制地图

{ CONSOLE_CURSOR_INFO cursor_info={1,0}   //隐藏光标的设置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info)

printf("\n\n \t\t\b推箱子")

printf("\n \t")

for (int i = 0i <9i++)

{for (int j = 0j <11j++)

{switch (map[m].a[i][j])

{case 0:  printf("  ")break

case 1:  printf("■")break

      case 3:  printf("◎")break

case 4:  printf("□")break

case 5:  printf("♀")break  //5是人

case 7:  printf("□")break //4 + 3箱子在目的地中

case 8:  printf("♀")break   // 5 + 3人在目的地中

}

}

printf("\n\t")

}

}

void gtxy(int x, int y)  //控制光标位置的函数

{ COORD coord

coord.X = x

coord.Y = y

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord)

}

void start( )  //开始游戏

{ int r, c   //r,c用于记录人的下标

for (int i = 0i <9i++)

{ for (int j = 0j <11j++)

     {if (map[m].a[i][j] == 5||map[m].a[i][j]==8) { r = i c = j} } //i j 人的下标

}

char key

key = getch( )

switch (key)

{case 'W':

case 'w':

case 72:

if (map[m]. a[r - 1][c] == 0|| map[m]. a [r - 1][c] == 3)

{ gtxy(2*c+8,r-1+3)printf("♀")  // gtxy(2*c+8,r-1+3)是到指定位置输出字符

        if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf("  ")}

       if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}

       map[m]. a [r - 1][c] += 5 map[m]. a [r][c] -= 5}

else  if (map[m]. a [r - 1][c] == 4 || map[m]. a [r - 1][c] == 7)

       { if (map[m]. a [r - 2][c] == 0 || map[m]. a [r - 2][c] == 3)

{ gtxy(2*c+8,r-2+3)printf("□")gtxy(2*c+8,r-1+3)printf("♀")

           if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf("  ")}

           if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}

           map[m]. a [r - 2][c] += 4 map[m]. a [r - 1][c] += 1

 map[m]. a [r][c] -= 5}

} break

case 'S':

case 's':

case 80:

if (map[m]. a [r + 1][c] == 0 || map[m]. a [r + 1][c] == 3)

 { gtxy(2*c+8,r+1+3)printf("♀")

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf("  ")}

        if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}

        map[m]. a [r + 1][c] += 5 map[m]. a [r][c] -= 5}

     else if (map[m]. a [r + 1][c] == 4 || map[m]. a [r+ 1][c] == 7)

         { if (map[m]. a [r + 2][c] == 0 || map[m]. a [r + 2][c] == 3)

           { gtxy(2*c+8,r+2+3)printf("□")gtxy(2*c+8,r+1+3)printf("♀")

             if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf("  ")}

            if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}

            map[m]. a [r + 2][c] += 4map[m]. a [r + 1][c] += 1

map[m]. a [r][c] -= 5}

  }break

case 'A':

case 'a':

case 75:

if (map[m]. a [r ][c - 1] == 0 || map[m]. a [r ][c - 1] == 3)

        { gtxy(2*(c-1)+8,r+3)printf("♀")

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf("  ")}

        if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}

         map[m]. a [r ][c - 1] += 5map[m]. a [r][c] -= 5}

     else if (map[m]. a [r][c - 1] == 4 || map[m]. a [r][c - 1] == 7)

        {if (map[m]. a [r ][c - 2] == 0 || map[m]. a [r ][c - 2] == 3)

{ gtxy(2*(c-2)+8,r+3)printf("□")gtxy(2*(c-1)+8,r+3)printf("♀")

            if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf("  ")}

            if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}

            map[m]. a [r ][c - 2] += 4map[m]. a [r ][c - 1] += 1

            map[m]. a [r][c] -= 5}

 }break

case 'D':

case 'd':

case 77:

if (map[m]. a [r][c + 1] == 0 || map[m]. a [r][c + 1] == 3)

 { gtxy(2*(c+1)+8,r+3)printf("♀")

         if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf("  ")}

         if(map[m]. a[r ][c] == 8) {gtxy(2*c+8,r+3)printf("◎")}

        map[m]. a [r][c + 1] += 5 map[m]. a [r][c] -= 5}

    else if (map[m]. a [r][c + 1] == 4 || map[m]. a [r][c + 1] == 7)

        { if (map[m]. a [r][c + 2] == 0 || map[m]. a [r][c + 2] == 3)

{ gtxy(2*(c+2)+8,r+3)printf("□")gtxy(2*(c+1)+8,r+3)printf("♀")

            if(map[m]. a[r ][c] == 5){gtxy(2*c+8,r+3)printf("  ")}

           if(map[m]. a[r ][c] == 8){gtxy(2*c+8,r+3)printf("◎")}

           map[m]. a [r][c + 2] += 4map[m]. a [r][c + 1] += 1

           map[m]. a [r][c] -= 5}

 }break

  }

}

int ifwan( )  //是否完成(1是0否)

{ if(m==0){if(map[m].a[5][2]==7&&map[m].a[5][3]==7&&

                map[m].a[6][2]==7&&map[m].a[6][3]==7) return 1}

if(m==1){if(map[m].a[5][2]==7&&map[m].a[6][2]==7&&

                map[m].a[7][2]==7) return 1}

if(m==2){if(map[m].a[7][1]==7&&map[m].a[7][2]==7&&map[m].a[7][3]==7&&

               map[m].a[7][4]==7&&map[m].a[7][5]==7) return 1}

if(m==3){if(map[m].a[4][4]==7&&map[m].a[4][5]==7&&map[m].a[4][6]==7&&

      map[m].a[5][4]==7&&map[m].a[5][5]==7&&map[m].a[5][6]==7) return 1}

if(m==4){if(map[m].a[3][2]==7&&map[m].a[4][1]==7&&map[m].a[4][2]==7&&

              map[m].a[5][1]==7&&map[m].a[5][2]==7) return 1}

return 0

}

int main( )  //主函数

{ while (1)

     { system("cls")

       DrMap( )

       while (1)

           { start( )

             if(ifwan()){printf("          }7")break} //完成后响铃

       m+=1

    }

  return 0

}

/*用两个链表来存储两个多项式,然后求和;创建的链表的每个节点包含多项式的一个项的信息:系数指数;从前到后搜索新加入的项应该存放的位置,加入到链表中合适的位置;程序中有提示,输入项的系数是0,结束该多项式的输入*/

#include <stdio.h>

#include <malloc.h>

typedef struct node{//定义节点类型

float coef

int expn

struct node * next

}PLOY

void start()//用户选择界面

{printf("************************************\n")

printf(" 两个一元多项式的相加\n")

printf(" 北京航空航天大学 机械设计系 孙兴涛\n")

printf("************************************\n")

printf("请选择 *** 作:\n")

printf("0.退出\n")

printf("1.两个一元多项式相加\n")

printf("2.帮助\n")

}

void notice()//用户帮助界面

{printf("********************帮助*********************\n")

printf("1.输入时只输入多项式的系数与指数,以0 0结束.\n")

printf("2.例如输入“1 1”然后回车,代表“1*X^1”\n")

}

void insert(PLOY *head,PLOY *inpt)//查找位置插入新链节程序

{PLOY *pre,*now

int signal=0

pre=head//pre定义为现在的前一个链节

if(pre->next==NULL) {pre->next=inpt}

else {now=pre->next

while(signal==0)

{if(inpt->expn<now->expn)//当新链节小于现在的连接时向后移一个链节

{if(now->next==NULL) {now->next=inptsignal=1}

else {pre=nownow=pre->next}}

else if(inpt->expn>now->expn)//如果发现比现在的链节大了就插入到这个连接的前面

{inpt->next=nowpre->next=inptsignal=1}

else {now->coef=now->coef+inpt->coefsignal=1free(inpt)//与当前链节相等指数

if(now->coef==0) {pre->next=now->nextfree(now)}}}}

}

PLOY * creat(char ch) //输入多项式

{PLOY *head, *inpt

float xint y

head=(PLOY *)malloc(sizeof(PLOY))//创建链表头

head->next=NULL

printf("请输入一元多项式%c:(格式:系数 指数,以0 0结束.)\n",ch)

scanf("%f %d",&x,&y)

while(x!=0)

{inpt=(PLOY *)malloc(sizeof(PLOY))//创建新链节

inpt->coef=x

inpt->expn=y

inpt->next=NULL

insert(head,inpt)//不然就查找位置并且插入新链节

scanf("%f %d",&x,&y)

}

return head

}

void addPLOY(PLOY *head,PLOY *pre)//多项式相加

{PLOY *inpt

int flag=0

while(flag==0)

{if(pre->next==NULL) flag=1//当现在指向空时跳出循环

else {pre=pre->next

inpt=(PLOY *)malloc(sizeof(PLOY))//创建新链节

inpt->coef=pre->coef

inpt->expn=pre->expn

inpt->next=NULL

insert(head,inpt)}//否则把当前“g(x)”的链节插入到“y(x)”中

}

}

void print(PLOY *fun)//输出多项式

{PLOY *printing

int flag=0

printing=fun->next//正在被打印的链节

if(fun->next==NULL)//如果函数为空打印0

{printf("0\n") return}

while(flag==0)

{if(printing->coef>0&&fun->next!=printing) printf("+")//为正数时打印“+”号

if(printing->coef==1)//如果为“1”就不用打印系数了

else if(printing->coef==-1) printf("-")//如果为“-1”就打印“-”号就行了

else printf("%f",printing->coef)//其余情况都得打印

if(printing->expn!=0) printf("x^%d",printing->expn)//如果指数为“0”不打印指数项

else if((printing->coef==1)||(printing->coef==-1)) printf("1")

if(printing->next==NULL) flag=1//如果现在的链节没有下一个就结束

else printing=printing->next

}

printf("\n")

}

void main()

{PLOY *f,*g

int sign=-1//设置标志

start()

while(sign!=0)

{scanf("%d",&sign)

switch(sign)

{case 0:break//退出

case 1:{printf("你选择的 *** 作是多项式相加:\n")

f=creat('f')//输入多项式f(x)

printf("f(x)=")

print(f)

g=creat('g')//输入多项式g(x)

printf("g(x)=")

print(g)

printf("F(x)=f(x)+g(x)=")

addPLOY(f,g)//两个多项式相加

print(f)

sign=-1//复位标志

start()//回复用户选择界面

break}

case 2:{notice()

sign=-1//复位标志

start()//回复用户选择界面

break}

default:{printf("输入有误!请重新选择 *** 作!\n")//选择错误,返回选择界面

start()break}}

}

printf("谢谢使用!\n")

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11379436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存