首页 > 编程语言 >c#植物生长仿真程序

c#植物生长仿真程序

时间:2024-07-05 19:30:10浏览次数:20  
标签:仿真 cpbxSeed return sender c# void 程序 private PlantState

1 引言

1.1课题研究的背景与意义

1.2系统开发研究现状

1.3系统程序开发所存在的问题

1.4 本文的主要内容及团队成员分共介绍

2  需求定义

2.1 系统介绍

2.2 系统的可行性分析

2.3 系统功能需求

3 系统分析与设计

3.1 系统架构

3.2 系统分析

3.3 系统详细设计

4  原型实现

5  测试

1引言

1.1课题研究的背景与意义

在当今社会生产作业中,高级编程语言应用广泛,通过C#编写植物生长仿真程序,未来可以模拟各种植物的生长环境并收集环境数据,执行种植、光照等功能,创建一个农场模拟项目可以帮助程序设计者熟悉语言特性和数据结构,比如队列、堆栈用于模拟农场操作,同时培养解决问题和逻辑设计的能力,同时这个项目可以体现对可持续发展的关注,通过编程模拟阳光照射、植物生长的农业生产模式,有助于提高公众对绿色科技的认识,对于创业者而言,这样的项目可能启发新的商业想法,比如基于智能农场平台提供定制化的农业解决方案服务。

1.2系统开发研究现状

在游戏设计、游戏开发以及人机交互领域的学术研究中,也会涉及到模拟经营仿真程序的设计原理和技术实现,研究者会探讨如何通过C#语言和相关技术来实现复杂的游戏机制和用户体验,许多教育机构和在线学习平台提供关于游戏开发的课程,涵盖从基础到高级的C#游戏编程技能。这些资源通常会涵盖到农场游戏这类模拟经营游戏的实现方法。

1.3系统程序开发所存在的问题

在开发C#植物生长仿真程序过程中,可能会遇到以下几类问题:

1. 生物学模型的复杂性:实现准确的植物生长模型需要深入理解植物生物学和生态学原理。处理光照、水分、养分吸收等因素的交互影响是挑战之一。

2. 图形化界面的设计与性能:开发吸引人的图形化界面(GUI),同时保证程序性能和用户体验之间的平衡,特别是在处理复杂的3D图形或实时数据更新时。

3. 数据模拟和算法优化:植物生长模拟涉及到大量的数据处理和算法优化,如何有效地模拟植物的生长过程并确保计算效率是关键问题。

4. 用户交互与反馈: 设计直观且易于理解的用户交互方式,使用户能够直观地观察到植物的生长变化,并理解他们的操作如何影响植物的生长。

5. 软件工程与模块化设计: 如何有效地组织代码结构,使其易于扩展和维护,同时遵循面向对象设计原则,确保程序的可靠性和可维护性。

解决这些问题需要综合运用生物学知识、数学建模、图形设计、数据处理、软件工程等多个领域的专业知识和技能,以确保开发出功能完善、稳定可靠的植物养成类仿真程序。

1.4本文的主要内容

本报告展现了使用软件工程系统化的方法和技术来开发和维护植物养成类仿真程序的主要过程,通过采用合理的开发工具、流程优化和自动化技术,提高开发团队的生产率和效率,减少开发时间和成本,同时提高程序的可预测性和稳定性。

2  需求定义

2.1 系统介绍

C#编写的植物生长仿真程序是一种模拟经营类程序,操作者可以选择不同的作物种植在农场,每种作物可能有不同的生长周期和收益率,且拥有良好的用户界面,操作者能够方便地查看和管理农场的各种植物信息并操作。

2.2 系统的可行性分析

2.3 系统功能需求

一个基于 C# 的植物生长仿真程序可以包含多种功能和特性,具体的功能需求可以根据程序的复杂性和目标受众进行调整和扩展。以下是功能需求:

  1. 植物种植和生长模拟:

用户可以选择不同类型的植物进行种植,模拟植物生长过程,包括种子播种、生长阶段、开花结果等。

2. 环境模拟和交互:

提供模拟的环境, 用户可以与环境进行交互,如灌溉、收获等操作影响植物生长。

3. 图形化展示和用户界面:

使用 Windows Forms 或 WPF 开发图形用户界面,显示植物、土壤等元素,提供可视化的植物生长过程和环境变化。

  1. 用户互动和反馈:

 允许用户对植物进行管理和操作,如种植、施肥、收获等。

这些功能需求可以作为开发的起点,根据具体的项目需求和用户反馈进一步调整和优化。

3 系统分析与设计

系统设计图:

3.1  系统分析

系统模型构建:

4  原型实现

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace WindowsFormsApp1

{

    public enum PlantState

    {

        Nothing,

        SowSeed,

        Growing,

        Blooming,

        BearFruit,

        Harvest,

    }

    public partial class Form1 : Form  //lei dingyi

    {

        private PictureBox NewSeed;

        private List<PictureBox> Seeds;

        private Seed selectedSeed;

        private bool move_seed;

        private PlantState State;

        int number;

       

    

         private void Form1_Load(object sender, EventArgs e)

        {

            this.State = PlantState.Nothing;

            this.NewSeed = null;

            this.Seeds = new List<PictureBox>();

            this.move_seed = false;

            this.number = 0;

            this.MouseMove += new System.Windows.Forms.MouseEventHandler(Form1_MouseMove);

        }

public Form1()

{

    InitializeComponent();

}

private void pbxSeed_MouseEnter(object sender, EventArgs e)

{

    this.pbxInseminate.Image = ChuffedFarm.Properties.Resources.播种1;

}

private void pbxSeed_MouseLeave(object sender, EventArgs e)

{

    this.pbxInseminate.Image = ChuffedFarm.Properties.Resources.播种;

}

private void pbxVegetate_MouseEnter(object sender, EventArgs e)

{

    this.pbxVegetate.Image = ChuffedFarm.Properties.Resources.生长1;

}

private void pbxVegetate_MouseLeave(object sender, EventArgs e)

{

    this.pbxVegetate.Image = ChuffedFarm.Properties.Resources.生长;

}

private void pbxBlossomOut_MouseEnter(object sender, EventArgs e)

{

    this.pbxBlossomOut.Image = ChuffedFarm.Properties.Resources.开花1;

}

private void pbxBlossomOut_MouseLeave(object sender, EventArgs e)

{

    this.pbxBlossomOut.Image = ChuffedFarm.Properties.Resources.开花;

}

private void pbxMakeFruitage_MouseEnter(object sender, EventArgs e)

{

    this.pbxMakeFruitage.Image = ChuffedFarm.Properties.Resources.结果1;

}

private void pbxMakeFruitage_MouseLeave(object sender, EventArgs e)

{

    this.pbxMakeFruitage.Image = ChuffedFarm.Properties.Resources.结果;

}

private void pbxHarvest_MouseEnter(object sender, EventArgs e)

{

    this.pbxHarvest.Image = ChuffedFarm.Properties.Resources.收获1;

}

private void pbxHarvest_MouseLeave(object sender, EventArgs e)

{

    this.pbxHarvest.Image = ChuffedFarm.Properties.Resources.收获;

}

private void Form1_MouseMove(object sender, MouseEventArgs e)

{

    if (this.cpbxSeed != null)//若已生成CPictureBox控件实例

    {

        if (this.Bounds.Contains(Cursor.Position))//若光标在窗体内

        {

            if (this.cpbxSeed.IsInseminate == false)//若种子还未种下

            {

                if (this.PlantState == PlantState.Inseminate)//若是种植状态

                {

                    this.cpbxSeed.Location = new Point(e.X-20 , e.Y-40 );

                }

            }

        }

    }

}

private void Form1_Click(object sender, EventArgs e)

{

    if (this.cpbxSeed != null)

    {

        this.cpbxSeed.IsInseminate = true;//表示种下

    }

}

private void cpbxSeed_Click(object sender, EventArgs e)

{

    if (this.cpbxSeed != null)

    {

        this.cpbxSeed.IsInseminate = true;//表示种下

    }

}

private void pbxInseminate_Click(object sender, EventArgs e)

{

    //什么时候可以种植

    if (PlantState != PlantState.Nothing && PlantState != PlantState.Harvest&&PlantState!= PlantState.Inseminate)

    {

        MessageBox.Show("还未收获,无法播种!");

        return;

    }

    //

    this.PlantState = PlantState.Inseminate;

    this.cpbxSeed = new CPictureBox();

    //

    this.cpbxSeed.BackColor = System.Drawing.Color.Transparent;

    this.cpbxSeed.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;

    this.cpbxSeed.Image = ChuffedFarm.Properties.Resources.seed2;

    this.cpbxSeed.Size = new System.Drawing.Size(ChuffedFarm.Properties.Resources.seed2.Width, ChuffedFarm.Properties.Resources.seed2.Height);//52.28

    this.cpbxSeed.Location = new System.Drawing.Point(this.pbxInseminate.Location.X-50,this.pbxInseminate.Location.Y - 80);

    //

    this.cpbxSeed.TabStop = true;

    this.cpbxSeed.IsInseminate = false;//刚刚创建种子实例,还未种下

    this.cpbxSeed.Click  = new System.EventHandler(this.cpbxSeed_Click);

    this.Controls.Add(this.cpbxSeed);

    //

    tipSeed.SetToolTip(this.cpbxSeed, "这是种子");

}

private void pbxVegetate_Click(object sender, EventArgs e)

{

    if (PlantState == PlantState.Nothing)

    {

        MessageBox.Show("还未播种,怎么长啊","信息提示!");

        return;

    }

    if (PlantState == PlantState.BlossomOut)

    {

        MessageBox.Show("正在开花,不能进入生长期!", "信息提示!");

        return;

    }

    if (PlantState == PlantState.MakeFruitage)

    {

        MessageBox.Show("正在结果,不能进入生长期!", "信息提示!");

        return;

    }

    if (PlantState == PlantState.Harvest)

    {

        MessageBox.Show("农场里都没有农作物了,怎么长呀!", "信息提示!");

        return;

    }

    this.PlantState = PlantState.Vegetate;

     

    IEnumerable<Control> cons = this.GetCPictureBoxes();

    foreach (CPictureBox cpbx in cons)

    {

        tipSeed.SetToolTip(cpbx, "");//已经开始生长,不再是种子,无需提示

        cpbx.Size = new Size(ChuffedFarm.Properties.Resources.grow.Width, ChuffedFarm.Properties.Resources.grow.Height);

        cpbx.Image = ChuffedFarm.Properties.Resources.grow;  

    }

}

private void pbxBlossomOut_Click(object sender, EventArgs e)

{

    if (PlantState == PlantState.Nothing)

    {

        MessageBox.Show("还未播种,能开花吗?", "信息提示!");

        return;

    }

    if (PlantState == PlantState.Inseminate)

    {

        MessageBox.Show("刚刚播完种,还未生长,能开花吗?", "信息提示!");

        return;

    }

    if (PlantState == PlantState.MakeFruitage)

    {

        MessageBox.Show("正在结果,不能开花了!", "信息提示!");

        return;

    }

    if (PlantState == PlantState.Harvest)

    {

        MessageBox.Show("农场里都没有农作物了,怎么开花呀!", "信息提示!");

        return;

    }

    this.PlantState = PlantState.BlossomOut;

    IEnumerable<Control> cons = this.GetCPictureBoxes();

    foreach (CPictureBox cpbx in cons)

    {

        cpbx.Image = ChuffedFarm.Properties.Resources.bloom;

    }

}

private void pbxMakeFruitage_Click(object sender, EventArgs e)

{

    if (PlantState == PlantState.Nothing)

    {

        MessageBox.Show("还未播种,能结果吗?", "信息提示!");

        return;

    }

    if (PlantState == PlantState.Inseminate)

    {

        MessageBox.Show("刚刚播完种,还未生长,能结果吗?", "信息提示!");

        return;

    }

    if (PlantState == PlantState.Vegetate)

    {

        MessageBox.Show("还处在生长期,并未开花,能结果吗?", "信息提示!");

        return;

    }

    if (PlantState == PlantState.Harvest)

    {

        MessageBox.Show("农场里都没有农作物了,怎么结果呀!", "信息提示!");

        return;

    }

    this.PlantState = PlantState.MakeFruitage;

    IEnumerable<Control> cons = this.GetCPictureBoxes();

    foreach (CPictureBox cpbx in cons)

    {

        cpbx.Image = ChuffedFarm.Properties.Resources.fruit;

    }

}

private void pbxHarvest_Click(object sender, EventArgs e)

{

    if (PlantState == PlantState.Nothing)

    {

        MessageBox.Show("还未播种,能收获吗?", "信息提示!");

        return;

    }

    if (PlantState == PlantState.Inseminate)

    {

        MessageBox.Show("刚刚播完种,还未生长,能收获吗?", "信息提示!");

        return;

    }

    if (PlantState == PlantState.Vegetate)

    {

        MessageBox.Show("还处在生长期,并未开花,能收获吗?", "信息提示!");

        return;

    }

    if (PlantState == PlantState.BlossomOut)

    {

        MessageBox.Show("正在花期,并未结果,能收获吗?", "信息提示!");

        return;

    }

    if (PlantState == PlantState.Harvest)

    {

        MessageBox.Show("已经收过了!", "信息提示!");

        return;

    }

    IEnumerable<Control> cons = this.GetCPictureBoxes();

    foreach (CPictureBox cpbx in cons)

    {

        intAmount  ;

        cpbx.Dispose();

    }

    if (cons.Count<Control>() > 0)

    {

        pbxHarvest_Click(sender, e);

    }

    this.PlantState = PlantState.Harvest;

    lbAmount.Text = "你的仓库里有"   intAmount.ToString() "个果实!";

}

/// <summary>

/// 获取动态生成的自定义PictureBox控件

/// </summary>

/// <returns></returns>

private IEnumerable<Control> GetCPictureBoxes()

{

    return this.Controls.Cast<Control>().Where(con => (con.GetType()==typeof(CPictureBox)));//Linq查询技术

}

标签:仿真,cpbxSeed,return,sender,c#,void,程序,private,PlantState
From: https://blog.csdn.net/2302_77382298/article/details/140188794

相关文章

  • ios CCNetwork.m
    ////CCNetwork.h//CCFC////Createdbyxichenon11-12-23.//Copyright2011ccteam.Allrightsreserved.//#import<Foundation/Foundation.h>#include<ifaddrs.h>#include<sys/socket.h>#include<net/if.h>#defineMAC......
  • ios CCPhone.m
    ////CCPhone.h//CCFC////Createdbyxichenon11-12-16.//Copyright2011年ccteam.Allrightsreserved.//#import<Foundation/Foundation.h>#import<UIKit/UIKit.h>#import"CCConfig.h"#import"CCDepend.h"#impo......
  • 【C语言题目】34.猜凶手
    文章目录作业标题作业内容2.解题思路3.具体代码作业标题猜凶手作业内容日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词:A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请......
  • 【C语言习题】33.杨氏矩阵
    文章目录作业标题作业内容2.解题思路3.具体代码作业标题杨氏矩阵作业内容有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度小于O(N);2.解题思路我们仔细分析,不难发现,对于杨氏......
  • 【C语言习题】32.字符串旋转结果
    文章目录作业标题作业内容2.解题思路3.具体代码作业标题字符串旋转结果作业内容写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1=AABCD和s2=BCDAA,返回1给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字......
  • 【0294】Postgres内核 dynahash 之 hash_search 实现原理
    相关文章:【0289】Postgres内核之哈希表(HashTables)【0290】Postgres内核之dynahash(动态哈希表,dynamichashtables)(概念篇)【0291】Postgres内核之dynahashtable创建【0292】Postgres内核源码之dynahash插入entry实现【0293】Postgres内核之创建dynahashtable解惑......
  • GPT-4o不仅能写代码,还能自查Bug,程序员替代进程再进一步!
    目录1 CriticGPT01综合性(Comprehensiveness):02幻觉问题(Hallucinatesaproblem):2其他CriticGPT案例随着人工智能(AI)技术不断进步,AI在编程领域的应用取得了显著的成果。通过使用自然语言处理(NLP)和机器学习(ML)技术,AI可以自动生成代码、检测错误并优化性能。一个例......
  • 【LinuxC语言】手撕Http协议之accept_request函数实现(一)
    文章目录前言accept_request函数作用accept_request实现解析方法根据不同方法进行不同操作http服务器响应格式unimplemented函数实现总结前言在计算机网络中,HTTP协议是一种常见的应用层协议,它定义了客户端和服务器之间如何进行数据交换。在这篇文......
  • ARC147E 做题记录
    link巧妙的题。我们相当于选择一个尽量小的集合\(S\),重新分配\(S\)中所有人的分数,使得最后所有人都满足要求。先把本来就不符合要求的加入\(S\),然后考虑再多加哪些人。考虑转化条件:考虑从值域入手。发现\(S\)合法的充要条件是:\(\forallk\),\(\sum\limits_{x\inS}[a_x......
  • #cmd的常用命令(Dos)
    cmd的常用命令首先win+r输入cmd并回车进入cmd命令中cd命令:进入指定目录cdd:进入d盘目录.会发现进入不了d盘,因为cd只能在当前目录下操作不能跨区操作.键入d:回车进入d盘.我d盘下有aaa文件夹cdaaa进入文件夹aaa目录下提示".."为上一级目录."."为当前目录cd......