GVKun编程网logo

前端网页学习(css部分)(前端 网页)

15

对于想了解前端网页学习的读者,本文将是一篇不可错过的文章,我们将详细介绍css部分,并且为您提供关于3月31日学习笔记(CSS部分)_html/css_WEB-ITnose、C++学习(七)(C语言部

对于想了解前端网页学习的读者,本文将是一篇不可错过的文章,我们将详细介绍css部分,并且为您提供关于3月31日学习笔记(CSS部分)_html/css_WEB-ITnose、C++学习(七)(C语言部分)之 输入、C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)、C++学习(三十七)(C语言部分)之 链式栈(推箱子实现)的有价值信息。

本文目录一览:

前端网页学习(css部分)(前端 网页)

前端网页学习(css部分)(前端 网页)

CSS

CSS介绍

Css:
层叠样式表/级联表
样式风格:
展开式,小写,选择器与大括号,冒号和键值,有空格
结构:
选择器+一条多条声明

选择器

选择器:单选择器和复合选择器

单选择器

单选择器:标签选择器,类选择器,id选择器,通配符选择器

1. 标签选择器
定义标签选择器:

 p {
            color: blue;
        }

调用选择器:自动调用

  1. 定义方式:标签名{}
  2. 特点:选择某类标签。可快速全局设置样式。但不能差异化设置

2. 类选择器

定义类选择器:

.red {
            color: red;
        }

调用选择器:
单类名调用:

<p>gaoyang</p>

多类名调用:

<p>gaoyang</p>
  1. 定义方式: .类名字
  2. 类名字不能用标签名字
  3. 可以用段横线分割长名字
  4. 不能用纯数字和中文
  5. 多类目之间用空格隔开
    作用:能差异化设置

3. id选择器
定义id选择器:

#gaoyang {
            color: black;
            font-size: 30px;
            background-color: blanchedalmond;
            width: 150px;
        }

调用选择器:

<div id="gaoyang">gaoyang</div>
  1. 定义方式:#定义
  2. 用id调用
  3. 调用是一次性的
  4. 通常和js一起使用

4. 通配符选择器
定义通配符选择器:

* {
            color: darkmagenta;
            font-size: 10px;
        }

调用选择器:自动调用
定义适用于所有的标签元素

复合选择器

复合选择器:后代选择器,子选择器,并集选择器,伪类选择器
1. 后代选择器(包含选择器):
通过空格 选择后代,可以是任意选择器,可跳跃选择
定义后代选择器:

ol li {
            color: red;
        }
.nav li a {
            color: gold;
        }

2. 子选择器:
通过>选择亲儿子。而非后代
定义子选择器:

.d1>a {
            color: indianred;
        }

3. 并集选择器:
 选择多组标签,定义相同样式,统一声明。
 可嵌套使用后代选择器,子选择器。
 不同标签间用,隔开。
 通常竖着写。

		a,
        li {
            font-size: 30px;
        }

4. 伪类选择器:
 向某些选择器添加效果
 链接伪类/结构伪类
 用:进行分割
链接伪类:

	a:link 所有未选过的链接
	a:visited 选择所有已访问的链接
	a:hover 位于其上的链接
	a:active 活动链接(鼠标按下未弹起的链接)

 按顺序声明才可生效
 先写一个a{}
focus伪类:
 选择表单元素

Input:focus

Css字体属性

.font {
            font-family: '宋体',Arial, Helvetica, sans-serif;
            /* 单引号双引号都可以 */
            /* 从左往右显示 */
            /* 尽量使用常用字体 */
            /* body字体设置 */
            font-size: 20px;
            /* 字体大小 */
            /* px像素 默认16 */
            /* 尽量自己设置防止不同浏览器显示不同 */
            font-weight: 600;
            /* 字体粗细 */
            /* 不加单位400normal */
            font-style: italic;
            /* 斜体 */
        }

简写:固定顺序/最少后面俩

.font-new1 {
            font: italic 700 16px '宋体'
        }
.font-new2 {
            font: 36px '宋体'
        }

Css文本属性

颜色color:red/#cc0000/reg(255,0,1)/reg(100%,10%,10%);
水平对齐 textalign:left(默认)/right/center;
装饰文本 text-decoration:none/underline/overline/line-through;
首行缩进 text-indent:100px/-20px/3em(一个字);
行间距 line-height:50px;

三种样式表

1) 行内样式表

<div style=”color:pink”></div>

简单,单个标签
2) 内部样式表(嵌入)

<style>     </style>

整个HTML页面
style在任意位置
3) 外部样式表
新建Css文件

<link rel="stylesheet" href="style008.css">

Chrome调试工具

  1. 打开浏览器F12/右键 检查
  2. Element(元素)
  3. 小技巧
    a) Ctrl+滚轮调大小
    b) 箭头定位
    c) Ctrl+0复原浏览器大小
    d) 没有样式(类错误)
    e) 黄色三角感叹号/划掉说明代码错误

元素显示模式

元素显示模式

元素显示模式:元素标签以什么方式进行显示。

块与行内元素

块元素
<h><p><ul><ol><div>
 独占一行
 高度宽度,外边距,内边距都可以控制。
 默认宽度是容器(父级的百分百)
 是一个容器或者盒子,可以放块级元素
 文字类不能放块级元素,如p/h
行内元素(内联元素)
 相邻的行内元素一行可以占多个
 高宽设置无效
 默认宽度是本身宽度
 智能容纳文本和其他行内元素
 链接不能再放链接
 特殊情况下a可以放块级元素
块内行元素
<img/>,<input/><td>
 可以一行多个,但是有空隙。
 默认宽度是本身
 宽度,行高,边距可设置。

元素显示模式的转换

元素显示模式的转换:
 用处:增加a的触发范围
 display:block
 display:input
 display:input block

3月31日学习笔记(CSS部分)_html/css_WEB-ITnose

3月31日学习笔记(CSS部分)_html/css_WEB-ITnose

  • 背景属性
  •  

  • 文本属性
  • direction 属性影响块级元素中文本的书写方向、表中列布局的方向、内容水平填充其元素框的方向、以及两端对齐元素中最后一行的位置。

    立即学习“前端免费学习笔记(深入)”;

    注释:对于行内元素,只有当 unicode-bidi 属性设置为 embed 或 bidi-override 时才会应用 direction 属性。

    direction 属性有两个值:ltr 和 rtl。大多数情况下,默认值是 ltr,显示从左到右的文本。

     

  • CSS链接四种状态
  •  a:hover 必须位于 a:link 和 a:visited 之后, a:active 必须位于 a:hover 之后

     

  • CSS列表相关属性
  • list-style-type控制表项图标,值有circle,square,upper-roman,lower-alpha等。

    list-style-image用图片替代表项图标,ul.img2{list-style-image: url("11.ico")}

    list-style为简写样式,值可以按任意顺序列出

  • CSS的table属性
  • border-collapse ---设置是否把表格边框合并为单一的边框。

    border-spacing ---设置分隔单元格边框的距离。

    caption-side --- 设置表格标题的位置。

    empty-cells ---设置是否显示表格中的空单元格。

    table-layout ---设置显示单元、行和列的算法。

  • CSS轮廓(outline)属性
  • outline-color 设置轮廓的颜色。

    outline-style 设置轮廓的样式。

    outline-width 设置轮廓的宽度。

     

    C++学习(七)(C语言部分)之 输入

    C++学习(七)(C语言部分)之 输入

    输入学习时的笔记(其实也没什么用,留着给自己看的)


    输出是指 把内容打印到控制台窗口

    输入是指 把内容输入到程序里 scanf
    scanf 从键盘获取内容到程序里
    格式占位符+变量要加取地址符


    1、格式占位符
    %d 整数类型
    %c 字符类型
    %f 浮点型 float (不能混写和%lf不一样)
    %lf double

    %s 字符串

    %u 无符号十进制
    %x 无符号十六进制
    %o 无符号八进制

    2、控制输入
    1、宽度 最大的接受的长度
    %3d 表示能够接受多少整数 3d 是最多能接受3位 多的区域留给下一个


    2.长度 h端 l长
    double %lf
    short %hd
    long %ld
    long long %lld


    3、* 表示跳过 获取内容后直接丢掉
    123456789

     

     

     


    关于scanf的说明
    1.scanf没有精度控制 也就是说没有%3.2lf这种说法


    2.变量记得取地址 %s用于字符数组 一般不需要取地址符


    3.输入多个字时 输入多个整数 小数 两个数字之间用空格 tab隔开或者回车隔开
    scanf的格式占位字符串里有什么就输入什么
    scanf格式占位符末尾也不要写\n


    4.%d 打印一个char -->ascii码
    scanf稍微严格一点 格式占位符和变量 类型要匹配 不然会报错

    5.scanf_s 新版函数 _s scanf 更安全
    scanf 旧版函数

    scanf和scanf_s区别
    输入char的时候的区别
    char ch;
    scanf("%c",&ch);
    scanf_s("%c",&ch,1);//输入字符串的时候额外加个1

    输入字符串时的区别
    char arr[20];
    scanf("%s",arr);
    scanf_s("%s",arr,20);//20是数组的大小 表示最多能够读取到20个字符

    除了上面两种情况 scanf和scanf_s没有区别 用法一致

    warning c4996 指明了代替的新函数 直接用新函数就行

    6.scanf的输入的时候 两个getchar
    在屏幕上输入 按下回车后 进入到缓冲区中
    \n留在缓冲区里
    scanf是在缓冲区里读取数据
    getchar();在缓冲区里读数据


    不报错不代表没有错误


    *****************************我是分割线*****************************************/

    #include<stdio.h>
    int main()
    {
    //例一:让用户输入年龄
    //printf("请输入你的年龄\n");//提示
    //int age;
    //scanf("%d",&age);//记得加上取地址符
    //printf("用户的年龄是%d\n",age);

    //例二:让用户输入手机号
    //int num1, num2;
    //printf("请输入你的电话号码\n");
    //scanf("%3d%*4d%4d",&num1,&num2);//%*4d舍弃
    //printf("用户的电话号码是%3d****%4d\n",num1,num2);

    //例三:
    //char arr[20];// 字符数组 [数组大小] char 数组名[数组大小] 字符数组的定义格式
    //字符串一般存放在字符数组中 \0是字符串结尾
    //数组大小 >=字符串中字符个数
    //字符产中的字符个数+1 字符创中的中文一个汉字占两位
    //printf("请输入字符串:");
    //scanf("%s",arr);
    //printf("输入的内容是:%s",arr);//不需要加取地址符


    //例四:输入时隔开的例子
    //int num1, num2;
    //printf("请输入年龄和身高\n");
    //scanf("%d,%d",&num1,&num2);//加了逗号之后 输入时只能用逗号隔开 否则一般是空格键
    //printf("%d岁,%d厘米\n",num1,num2);


    //例五
    //char x, y;
    //scanf("%d%d",&x,&y);
    //printf("%d岁,%d厘米",x,y);


    getchar();//如果有scanf 最好加上两个getchar 只需要用到两个
    getchar();
    while (1);//死循环 防止提前退出
    return 0;

    }

     

    2018.05.22  11:39:28

    C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)

    C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)

    括号匹配测试代码笔记如下:

      1 #include<stdio.h>
      2 #include<string.h>
      3 #include <stdlib.h>
      4 #define  SIZE 10
      5 
      6 typedef struct Stack
      7 {
      8     char c[SIZE];   //存放左弧  它是一个字符
      9     int top;
     10 }STACK,*PSTACK;
     11 
     12 //1.初始化栈
     13 void Init_Stack(PSTACK S)  //这里只需要一个参数  把栈传进来初始化
     14 {
     15     S->top = 0;  //栈顶是从第0个下标开始 
     16     for (int i = 0; i < SIZE; i++)
     17     {
     18         S->c[i] = 0;
     19     }
     20 }
     21 
     22 //2.入栈操作
     23 
     24 void Push_Stack(PSTACK S, char data)  //参数1:表明插入的栈     参数2: 要插入的数据
     25 {
     26     //2.1 判断栈是否是满的  如果是满的就退出   满了你还要插入 会报错
     27 
     28     if (S->top >= SIZE)
     29     {
     30         printf("栈满!无法继续插入\n");
     31         return;  //结束这个函数.
     32     }
     33 
     34     //2.2 栈没有满
     35     S->c[S->top] = data;
     36     S->top++;   //在执行插入操作之后 我的top要+1
     37 }
     38 
     39 //3.获取栈顶元素   这里只是得到栈顶元素 不是出栈
     40 char GetStackTop(PSTACK S)
     41 {
     42     return S->c[S->top - 1];
     43 }
     44 
     45 //4. 出栈
     46 void Pop_Stack(PSTACK S)
     47 {
     48     //这里我就不判断   判断是不是空
     49 
     50     S->top--;  //所有操作都是同top去操作  我只需要改变top的位置
     51 }
     52 
     53 //5.判断是不是空的栈
     54 int Stack_Empty(PSTACK S)  //函数返回1 说明什么栈是空的  如果返回0说明栈是有元素的
     55 {
     56     return S->top == 0;   //等于0说明栈是空的
     57 }
     58 //我只需要在前面代码的基础 加一个函数
     59 int isEatch(PSTACK S, char *str)  // 参数1: 指明左弧要入栈的是哪一个栈  参数2:要匹配的字符串  返回值:返回1说明匹配 返回0说明不匹配
     60 {
     61      // 得到要匹配的字符串长度
     62     int  len = strlen(str);
     63     //循环遍历每一个字符
     64     for (int i = 0; i < len; i++)  // ()  []  {}
     65     {
     66         switch (str[i])
     67         {
     68         case ''('':
     69         case ''['':
     70         case ''{'':
     71             //如果是左弧 要入栈
     72 
     73             Push_Stack(S, str[i]);
     74             break;
     75         case '')'':
     76             if (!Stack_Empty(S) && GetStackTop(S) == ''('')
     77             {
     78                 Pop_Stack(S);
     79             }
     80             else
     81             {
     82                 return 0;  //如果栈为空  或者 栈顶元素跟当前元素不匹配
     83             }
     84             break;
     85         case '']'':  //自己写
     86             break;
     87         case ''}'':  //自己写
     88             break;
     89         }
     90     }
     91     //判断最后栈里面是否还有数据 如果右说明是不匹配
     92     if (!Stack_Empty(S))
     93     {
     94         return 0;
     95     }
     96     //返回1 说明是匹配的
     97     return 1;
     98 
     99 }
    100 
    101 int main()
    102 {
    103     STACK MyStack;
    104     Init_Stack(&MyStack);
    105     char Str[258];
    106     while (1)
    107     {
    108         printf("请输入一个字符串: ");
    109         scanf("%s", Str);
    110         int a = isEatch(&MyStack, Str);
    111         if (a)
    112         {
    113             printf("括号匹配!\n");
    114         }
    115         else
    116         {
    117             printf("括号不匹配!\n");
    118         }
    119     }
    120     return 0;
    121 }

     

    C++学习(三十七)(C语言部分)之 链式栈(推箱子实现)

    C++学习(三十七)(C语言部分)之 链式栈(推箱子实现)

    用链表实现栈
    一开始在表头插入,就要一直在表头插入
    一开始在表尾插入,就要一直在表头插尾
    表头当栈底 也可以把表尾当栈底

    实现的测试代码笔记如下:

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<string.h>
      4 
      5 //节点的结构体
      6 typedef struct Node
      7 {
      8     char *name;
      9     struct Node *pNext;
     10 }LIST, *PLIST;
     11 
     12 //1.创建“火车头”  创建一个表头
     13 void CreateListHead(PLIST *p_list)  //传入头结点指针 给他分配内存
     14 {
     15     //一级指针 形参和实参结合时
     16     //PLIST p_list = p_head;  形参和实参结合时候的赋值
     17     //p_list 改变 是不影响到p_head  就好像是A给B发送了一个文件 B对文件进行了修改,是不会影响A手中的文件
     18 
     19     //要改变一级指针的实参 函数要传入一级指针的地址 保存一级指针的地址 要使用二级指针
     20     *p_list = (PLIST)malloc(sizeof(LIST));
     21     (*p_list)->pNext = NULL;
     22 
     23 }
     24 
     25 //实现一个栈 
     26 //2.写入栈函数
     27 void Push_Stack(PLIST p_list, char *name)
     28 {
     29     //头插法
     30     PLIST node = (PLIST)malloc(sizeof(LIST));
     31     //node->name - name;  可以这么写 但是如果存入得扇区内存,会被释放掉 就会出错
     32     node->name = (char *)malloc(sizeof(char)*strlen(name) + 1);
     33     strcpy(node->name, name);
     34     node->pNext = p_list->pNext;
     35     p_list->pNext = node;
     36 }
     37 
     38 //3.获取栈顶元素
     39 char * GetStackTop(PLIST p_list)
     40 {
     41     //如果不是空 就返回头结点的下一个节点的name
     42     PLIST p_Temp = p_list->pNext;
     43     if (p_Temp != NULL)
     44     {
     45         return p_Temp->name;
     46     }
     47     return NULL;  //说明栈是空
     48 }
     49 
     50 //4.出栈
     51 void Pop_Stack(PLIST p_list)
     52 {
     53     //相当于删除结点  之前是头插法  那么最后一个在最前面
     54     PLIST p_Temp = p_list->pNext;
     55     if (p_Temp != NULL)
     56     {
     57         //p_remp保存第一个节点的地址
     58         p_Temp = p_list->pNext;
     59         //让头结点的pnext连接到第二个节点
     60         p_list->pNext = p_Temp->pNext;
     61     }
     62     free(p_Temp);  //释放内存  释放掉第一个节点 是释放p_temp里面所保存的内存 而不是释放指针变量
     63 }
     64 
     65 //5.判断栈是否为空
     66 int isEmpty(PLIST p_list)
     67 {
     68     //如果栈为空 返回1
     69     return p_list->pNext == NULL;
     70 }
     71 
     72 int main()
     73 {
     74     PLIST p_head = NULL;  //作为链表的标记
     75     CreateListHead(&p_head);
     76     /*if (NULL == p_head)
     77     {
     78         printf("内存分配失败!\n");
     79     }
     80     else
     81     {
     82         printf("内存分配成功!\n");
     83     }*/
     84 
     85     Push_Stack(p_head, "");
     86     Push_Stack(p_head, "");
     87     Push_Stack(p_head, "");
     88     Push_Stack(p_head, "");
     89     Push_Stack(p_head, "");
     90     Push_Stack(p_head, "");
     91     Push_Stack(p_head, "");
     92     Push_Stack(p_head, "");
     93     Push_Stack(p_head, "");
     94     Push_Stack(p_head, "");
     95     Push_Stack(p_head, "");
     96     Push_Stack(p_head, "");
     97     while (!isEmpty(p_head))
     98     {
     99         printf("%s", GetStackTop(p_head));
    100         Pop_Stack(p_head);
    101     }
    102 
    103     getchar();
    104     return 0;
    105 }

    附:

     

     

    推箱子实现,代码笔记如下所示:

     

      1 1、main.cpp文件
      2 
      3 //推箱子
      4 //操作说明 WASD表示上下左右移动 空格键可以退回到上一步
      5 #if 1
      6 #include<graphics.h>
      7 #include<stdio.h>
      8 #include <conio.h>
      9 
     10 #include "Stack.h"
     11 //地图
     12 int Map[9][8] = {
     13     0, 0, 1, 1, 1, 1, 1, 0,
     14     1, 1, 1, 0, 0, 0, 1, 0,
     15     1, 3, 5, 4, 0, 0, 1, 0,
     16     1, 1, 1, 0, 4, 3, 1, 0,
     17     1, 3, 1, 1, 4, 0, 1, 0,
     18     1, 0, 1, 0, 3, 0, 1, 1,
     19     1, 4, 0, 7, 4, 4, 3, 1,
     20     1, 0, 0, 0, 3, 0, 0, 1,
     21     1, 1, 1, 1, 1, 1, 1, 1
     22 };
     23 
     24 //实现退回操作
     25 void Retrogress(PLIST p_list)
     26 {
     27     //1.获取栈顶数据
     28     PLIST p_Temp = GetStackTop(p_list);
     29     if (NULL == p_Temp)
     30     {
     31         return;
     32     }
     33     for (int i = 0; i < 9; i++)
     34     {
     35         for (int j = 0; j < 8; j++)
     36         {
     37             Map[i][j] = p_Temp->p[i][j];
     38         }
     39     }
     40     Pop_Stack(p_list);  //出栈
     41 }
     42 
     43 //对于一个游戏1.初始化  加载图片
     44 IMAGE g_box, g_dbox, g_people, g_point, g_wall, g_blank;
     45 void Init_Game()
     46 {
     47     loadimage(&g_box, L"./source/box.jpg");  //相对路径
     48     loadimage(&g_dbox, L"./source/dbox.jpg");
     49     loadimage(&g_people, L"./source/people.jpg");
     50     loadimage(&g_point, L"./source/point.jpg");
     51     loadimage(&g_wall, L"./source/wall.jpg");
     52     loadimage(&g_blank, L"./source/blank.jpg");
     53 }
     54 
     55 //2.加载图片
     56 void Paint_Game()
     57 {
     58     for (int i = 0; i < 9; i++)
     59     {
     60         for (int j = 0; j < 8; j++)
     61         {
     62             switch (Map[i][j])
     63             {
     64             case 0: //0表示空地
     65                 putimage(j * 45, i * 45, &g_blank);
     66                 break;
     67             case 1: // 1表示墙壁
     68                 putimage(j * 45, i * 45, &g_wall);
     69                 break;
     70             case 3: // 3表示目的地
     71                 putimage(j * 45, i * 45, &g_point);
     72                 break;
     73             case 4: // 4表示箱子
     74                 putimage(j * 45, i * 45, &g_box);
     75                 break;
     76             case 5: // 5表示人
     77                 putimage(j * 45, i * 45, &g_people);
     78                 break;
     79             case 7: // 7表示箱子在目的地   4+3
     80                 putimage(j * 45, i * 45, &g_dbox);
     81                 break;
     82             case 8: // 8表示人在目的地   5+3
     83                 putimage(j * 45, i * 45, &g_people);
     84                 break;
     85             }
     86         }
     87     }
     88 }
     89 
     90 //3.实现人物移动
     91 void MovePeople(PLIST p_list)
     92 {
     93     int i, j;
     94     for (i = 0; i < 9; i++)
     95     {
     96         for (j = 0; j < 8; j++)
     97         {
     98             //找到人的位置
     99             if (Map[i][j] == 5 || Map[i][j] == 8)
    100             {
    101                 //if成立说明找到人
    102                 break;
    103             }
    104         }
    105         if (Map[i][j] == 5 || Map[i][j] == 8)
    106         {
    107             //if成立说明找到人
    108             break;
    109         }
    110     }
    111     switch (getch())
    112     {
    113 //表示往左边移动
    114     case ''a'':  
    115         //人的左边是空地 或者 是目的
    116         if (Map[i][j - 1] == 0 || Map[i][j - 1] == 3)
    117         {
    118             Map[i][j - 1] += 5;  //人往左边移动
    119             Map[i][j] -= 5;  //人离开了当前位置
    120         }//人的左边是箱子或者是箱子在目的
    121         else if (Map[i][j - 1] == 4 || Map[i][j - 1] == 7)
    122         {
    123             if (Map[i][j - 2] == 0 || Map[i][j - 2] == 3)
    124             {
    125                 Map[i][j - 2] += 4;
    126                 Map[i][j - 1] += 1;
    127                 Map[i][j] -= 5;
    128             }
    129         }
    130         //每次移动都要入栈
    131         Push_Stack(p_list, Map);
    132         break;
    133 
    134 //表示往右边
    135     case ''d'': 
    136         //人的右边是空地 或者 是目的
    137         if (Map[i][j + 1] == 0 || Map[i][j + 1] == 3)
    138         {
    139             Map[i][j + 1] += 5;  //人往左边移动
    140             Map[i][j] -= 5;  //人离开了当前位置
    141         }//人的右边是箱子或者是箱子在目的
    142         else if (Map[i][j + 1] == 4 || Map[i][j + 1] == 7)
    143         {
    144             if (Map[i][j + 2] == 0 || Map[i][j + 2] == 3)
    145             {
    146                 Map[i][j + 2] += 4;
    147                 Map[i][j + 1] += 1;
    148                 Map[i][j] -= 5;
    149             }
    150         }
    151         //每次移动都要入栈
    152         Push_Stack(p_list, Map);
    153         break;
    154 
    155 //表示往上边移动
    156     case ''w'':  
    157         //人的上边是空地 或者 是目的
    158         if (Map[i - 1][j] == 0 || Map[i - 1][j] == 3)
    159         {
    160             Map[i - 1][j] += 5;  //人往上边移动
    161             Map[i][j] -= 5;  //人离开了当前位置
    162         }//人的上边是箱子或者是箱子在目的
    163         else if (Map[i - 1][j] == 4 || Map[i - 1][j] == 7)
    164         {
    165             if (Map[i - 2][j] == 0 || Map[i - 2][j] == 3)
    166             {
    167                 Map[i - 2][j] += 4;
    168                 Map[i - 1][j] += 1;
    169                 Map[i][j] -= 5;
    170             }
    171         }
    172         //每次移动都要入栈
    173         Push_Stack(p_list, Map);
    174         break;
    175 
    176 //表示什么往下边移动
    177     case ''s'':  
    178         //人的下边是空地 或者 是目的
    179         if (Map[i + 1][j] == 0 || Map[i + 1][j] == 3)
    180         {
    181             Map[i + 1][j] += 5;  //人往左边移动
    182             Map[i][j] -= 5;  //人离开了当前位置
    183         }//人的下边是箱子或者是箱子在目的
    184         else if (Map[i + 1][j] == 4 || Map[i + 1][j] == 7)
    185         {
    186             if (Map[i + 2][j] == 0 || Map[i + 2][j] == 3)
    187             {
    188                 Map[i + 2][j] += 4;
    189                 Map[i + 1][j] += 1;
    190                 Map[i][j] -= 5;
    191             }
    192         }
    193         //每次移动都要入栈
    194         Push_Stack(p_list, Map);
    195         break;
    196     case VK_SPACE: //空格
    197         if (!isEmpty(p_list))
    198         {
    199             Retrogress(p_list);
    200             Paint_Game();
    201         }
    202     }
    203 }
    204 
    205 //4.判断游戏是否结束
    206 int  isWin()
    207 {
    208     for (int i = 0; i < 9; i++)
    209     {
    210         for (int j = 0; j < 8; j++)
    211         {
    212             if (Map[i][j] == 4)
    213             {
    214                 return 0;
    215             }
    216         }
    217     }
    218     return 1;
    219 }
    220 
    221 int main()
    222 {
    223     initgraph(360, 405);  //初始化图形界面
    224     Init_Game();
    225     PLIST p_head = NULL;
    226     CreateListHead(&p_head);
    227     Paint_Game();
    228     while (!isWin())
    229     {
    230         Paint_Game();
    231         MovePeople(p_head);
    232     }
    233     Paint_Game();
    234     getchar();//防止运行到closegraph() 直接退出 看不到效果
    235     closegraph(); //关闭图形界面
    236 
    237     return 0;
    238 }
    239 
    240 
    241 *********************分割线************************
    242 
    243 
    244 2、Stack.h文件
    245 #include <stdlib.h>
    246 #include <stdio.h>
    247 /*
    248 以后  头文件是用来声明函数 或者类
    249 */
    250 typedef struct Node
    251 {
    252     //char *name;   //前面是不是讲过动态分配二维数组
    253     //通过指针数组来实现
    254     int **p;  //目的:分配二维数组用来保存我的地图信息
    255     struct Node * pNext; 
    256 }LIST, *PLIST;
    257 
    258 void CreateListHead(PLIST *p_list);
    259 
    260 void Push_Stack(PLIST p_list, int(*pArr)[8]);
    261 
    262 //返回整个结点的内容
    263 PLIST  GetStackTop(PLIST p_list);  
    264 
    265 void Pop_Stack(PLIST p_list);
    266 
    267 int isEmpty(PLIST p_list);
    268 
    269 
    270 *********************分割线************************
    271 
    272 
    273 3、Stack.cpp文件
    274 #include "Stack.h"
    275 
    276 void Push_Stack(PLIST p_list, int(*pArr)[8])
    277 {
    278     PLIST node = (PLIST)malloc(sizeof(LIST));
    279     //先给二级指针申请内存   
    280     node->p = (int **)malloc(sizeof(int)* 9); // p就相当于是一个  指针数组  int *p[9]
    281     for (int i = 0; i < 9; i++)
    282     {
    283         //通过这个就能够分配一个二维数组
    284         node->p[i] = (int*)malloc(sizeof(int)* 8);
    285     }
    286     for (int i = 0; i < 9; i++)
    287     {
    288         for (int j = 0; j < 8; j++)
    289         {
    290             node->p[i][j] = pArr[i][j];
    291         }
    292         //代码  提升写代码能  语法有关
    293         //思路  实现功能 首先你要有思路
    294         //逻辑   你的方法的逻辑性是否可以
    295         // 栈  链表
    296     }
    297     //连接指针
    298     node->pNext = p_list->pNext;
    299     p_list->pNext = node;
    300     // int a[5] 
    301     // int *a[5]  a二级指针  
    302 }
    303 
    304 PLIST  GetStackTop(PLIST p_list)
    305 {
    306     if (p_list->pNext != NULL)
    307     {
    308         return p_list->pNext;
    309     }
    310     return NULL;
    311 }
    312 
    313 void Pop_Stack(PLIST p_list)
    314 {
    315     PLIST p_Temp = NULL;
    316     if (p_list->pNext != NULL)
    317     {
    318         //p_temp保存第一节点的地址
    319         p_Temp = p_list->pNext;
    320 
    321         //让头节点的pnext连接到第二个结点
    322         p_list->pNext = p_Temp->pNext;
    323     }
    324     //释放掉第一个结点
    325     free(p_Temp);  //会释放p_temp里面所保存的内存 而不是释放指针变量
    326 }
    327 
    328 int isEmpty(PLIST p_list)
    329 {
    330     return p_list->pNext == NULL;
    331 }
    332 
    333 void CreateListHead(PLIST *p_list) //传入头节点指针 给它分配内存
    334 {
    335     *p_list = (PLIST)malloc(sizeof(LIST));
    336     (*p_list)->pNext = NULL;
    337 }

     

    最后实现效果如下所示;

     

    2019-04-01  21:33:15

    我们今天的关于前端网页学习css部分的分享已经告一段落,感谢您的关注,如果您想了解更多关于3月31日学习笔记(CSS部分)_html/css_WEB-ITnose、C++学习(七)(C语言部分)之 输入、C++学习(三十一)(C语言部分)之 栈和队列(括号匹配示例)、C++学习(三十七)(C语言部分)之 链式栈(推箱子实现)的相关信息,请在本站查询。

    本文标签: