Skip to content

Instantly share code, notes, and snippets.

@TheBrenny
Last active March 2, 2020 04:52
Show Gist options
  • Save TheBrenny/e2035b8dea9e9a2914ebf52b9f2d8f6a to your computer and use it in GitHub Desktop.
Save TheBrenny/e2035b8dea9e9a2914ebf52b9f2d8f6a to your computer and use it in GitHub Desktop.
VSCode vs Eclipse Formatting
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="13">
<profile kind="CodeFormatterProfile" name="Jarod" version="13">
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="48"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="do not insert"/>
</profile>
</profiles>
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* The SnowPanel is what actually <em>IS</em> the game. It holds the main update
* and draw functions and is actually what shows inside of the frame in
* {@link SnowDriver}.
*
* @author z5217759 - Jarod Brennfleck
* @assessmentItem Assignment 3
* @date 17 Aug. 2019
*/
public class SnowPanel extends JPanel {
private static final long serialVersionUID = 65752066642573530L;
public static final int GAME_STATE_NOT_STARTED = -1;
public static final int GAME_STATE_STARTED = 0;
public static final int GAME_STATE_WIN = 1;
public static final int GAME_STATE_LOSE = 2;
public static final float CATCHER_SPEED = 15;
public static final long DEFAULT_SPAWN_RATE = 4000;
public static final long SPAWN_RATE_DECAY = 125;
public static final Color DEFAULT_FLAKE_COLOR = Color.WHITE;
public static final Color DEFAULT_CATCHER_COLOR = Color.WHITE;
public static final Color DEFAULT_BOARD_COLOR = Color.BLUE;
public static final Dimension BOARD_SIZE = new Dimension(500, 400);
public static final Font GAME_FONT = new Font("Roboto", Font.BOLD | Font.ITALIC, 20);
private JPanel btnPanel;
private JLabel scoreLabel;
private FontMetrics fontMets;
private int boardTop = 80;
private int boardBottom;
private int boardLeft = 0;
private int boardRight;
private ArrayList<SnowFlake> allFlakes;
private float catchX;
private float catchY;
private float catchWidth = 40;
private float catchHeight = 20;
private float catchSpeed = CATCHER_SPEED;
private int gameState = GAME_STATE_NOT_STARTED;
private float score = 0;
private float highScore = score;
private long spawnRate = DEFAULT_SPAWN_RATE;
private long lastSpawn = 0;
private boolean colorChangeMode = false;
public SnowPanel() {
allFlakes = new ArrayList<SnowFlake>();
createPanel();
createSnowGame();
fontMets = getFontMetrics(GAME_FONT);
}
public void createPanel() {
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
float catcherMovement = 0;
String cmd = e.getActionCommand();
if(cmd.equals("left1")) catcherMovement -= 1;
else if(cmd.equals("left2")) catcherMovement -= 2;
else if(cmd.equals("left3")) catcherMovement -= 3;
else if(cmd.equals("right1")) catcherMovement += 1;
else if(cmd.equals("right2")) catcherMovement += 2;
else if(cmd.equals("right3")) catcherMovement += 3;
else if(cmd.equals("reset")) {
if(getGameState() == GAME_STATE_WIN || getGameState() == GAME_STATE_LOSE) {
resetGame();
}
} else if(cmd.equals("start")) {
if(getGameState() == GAME_STATE_NOT_STARTED) {
startGame();
}
}
moveCatcher(catcherMovement);
// one line clamp statement.
// is the exact same as:
// if((catchX - catchWidth / 2) <= 0) catchX = catchWidth / 2;
// else if((catchX + catchWidth / 2) >= boardRight) catchX = boardRight -
// catchWidth / 2;
/*
* I won't `repaint()` here because that will change the frame
* rate! Although
* minutely, it will still happen!!!
*/
}
};
scoreLabel = new JLabel();
updateScoreString();
btnPanel = new JPanel();
btnPanel.setPreferredSize(new Dimension(BOARD_SIZE.width, 40));
btnPanel.setBackground(Color.blue);
// This method is more extensible and easier to manage.
//@formatter:off
String[][] btns = {
{"<<<", "left3"},
{"<<", "left2"},
{"<", "left1"},
{"Reset", "reset"},
{"Start", "start"},
{">", "right1"},
{">>", "right2"},
{">>>", "right3"}
};
//@formatter:on
JButton btnTmp;
for(int btn = 0; btn < btns.length; btn++) {
btnTmp = new JButton(btns[btn][0]);
btnTmp.setActionCommand(btns[btn][1]);
btnTmp.addActionListener(al);
btnPanel.add(btnTmp);
}
JCheckBox checkTmp = new JCheckBox("Secret mode...", false);
checkTmp.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
SnowPanel.this.colorChangeMode = (e.getStateChange() == ItemEvent.SELECTED);
}
});
btnPanel.add(checkTmp, btns.length / 2);
btnPanel.validate();
setPreferredSize(BOARD_SIZE);
setBackground(Color.cyan);
add(scoreLabel);
add(btnPanel);
}
public void createSnowGame() {
boardLeft = 0;
boardRight = BOARD_SIZE.width;
boardTop = 80; // The top of the game is 80.
boardBottom = BOARD_SIZE.height - 10; // Minus 10 because that's the game baseline
resetGame();
}
public int getGameState() {
return gameState;
}
public void setGameState(int gameState) {
this.gameState = gameState;
}
public void addSnowFlake() {
float velMax = 1.5F; // Just a value because lol y not?
float sfX = randomFloat(boardLeft, boardRight);
float sfY = boardTop;
float xVel = randomFloat(-velMax, velMax);
synchronized(allFlakes) {
SnowFlake sf = new SnowFlake(sfX, sfY, xVel, SnowFlake.DEFAULT_Y_VELOCITY);
allFlakes.add(sf);
}
}
public void startGame() {
setGameState(GAME_STATE_STARTED);
}
public void winGame(SnowFlake sf) {
score += 1 + (this.colorChangeMode ? 0.5F : 0F);
highScore = score > highScore ? score : highScore;
synchronized(allFlakes) {
allFlakes.remove(sf);
}
}
public void loseGame() {
setGameState(GAME_STATE_LOSE);
}
public void resetGame() {
setGameState(GAME_STATE_NOT_STARTED);
updateScoreString();
synchronized(allFlakes) {
allFlakes.removeAll(allFlakes); // empties the entire array list
score = 0;
spawnRate = DEFAULT_SPAWN_RATE;
catchX = 250;
catchY = boardBottom - catchHeight;
lastSpawn = 0;
spawnRate = DEFAULT_SPAWN_RATE;
}
}
public void updateGame() {
if(getGameState() != GAME_STATE_STARTED) return; // Don't update if we're not playing...
moveFlakes();
if(now() - lastSpawn > spawnRate) {
addSnowFlake();
lastSpawn = now();
spawnRate -= SPAWN_RATE_DECAY;
spawnRate = Math.max(spawnRate, SPAWN_RATE_DECAY); // Clamp above SPAWN_RATE_DECAY
}
}
public void moveFlakes() {
if(getGameState() != GAME_STATE_STARTED) return;
// Synchronize this because IN THE OFF CHANCE that we access all flakes twice at
// once!
// Here we loop through all the flakes, move them, check their boundaries, and
// then check if it's been caught!
SnowFlake s;
synchronized(allFlakes) {
for(int i = 0; i < allFlakes.size(); i++) {
s = allFlakes.get(i);
s.update();
s.checkBoundaries(boardTop, boardRight, boardBottom, boardLeft);
if(s.isEndOfLife()) {
if(catchX - catchWidth / 2 <= s.getX() && s.getX() <= catchX + catchWidth / 2) winGame(s);
else loseGame();
}
}
}
updateScoreString();
}
/**
* Moves the catcher according to the amount of steps requested multiplied
* by
* the catcher's speed. The default speed is {@value #CATCHER_SPEED} as
* defined
* by {@link #CATCHER_SPEED}.
*
* Positive steps moves the catcher right, while negative steps move the
* catcher
* left.
*
* @param steps
* How many steps of {@link #CATCHER_SPEED} to take.
*/
public void moveCatcher(float steps) {
if(getGameState() != GAME_STATE_STARTED) return;
steps *= catchSpeed;
catchX += steps;
catchX = (catchX - catchWidth / 2) <= 0 ? catchWidth / 2 : (catchX + catchWidth / 2) >= boardRight ? boardRight - catchWidth / 2 : catchX;
}
public void updateScoreString() {
this.scoreLabel.setText(getScoreString());
}
public String getScoreString() {
return "Score: " + (int) this.score + " ---- High Score: " + (int) this.highScore;
}
/**
* This updates the game's logic after rendering it to the screen.
*
* Ideally a new thread should've been created to call update and repaint,
* or
* better yet, a more stable "sleep timer" could be used (instead of always
* sleeping 20ms, ie, sleep the remainder of 20ms from
* {@link System#currentTimeMillis()}).
*/
@Override
protected void paintComponent(Graphics g) {
Color flakeColor = DEFAULT_FLAKE_COLOR;
Color catcherColor = DEFAULT_CATCHER_COLOR;
Color boardColor = DEFAULT_BOARD_COLOR;
if(this.colorChangeMode) {
flakeColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255));
catcherColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255));
boardColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255));
}
if(this.getBackground() != boardColor) {
this.setBackground(boardColor);
this.validate();
}
super.paintComponent(g);
g.setColor(flakeColor);
drawSnowFlakes(g);
g.setColor(catcherColor);
drawCatcher(g);
// Only go through here if we know our game state is "running"
if(getGameState() != GAME_STATE_STARTED) {
drawEndgameString(g);
}
try {
// Make Logic Changes
updateGame();
Thread.sleep(20);
repaint();
} catch(Exception e) {
e.printStackTrace();
}
}
public void drawSnowFlakes(Graphics g) {
synchronized(allFlakes) {
for(SnowFlake s : allFlakes) {
s.draw(g);
}
}
}
public void drawCatcher(Graphics g) {
g.fillOval((int) (catchX - (catchWidth / 2)), (int) (catchY), (int) catchWidth, (int) catchHeight); // brackets
// make math
// easy!
}
public void drawEndgameString(Graphics g) {
String stateString = "";
if(getGameState() == GAME_STATE_LOSE) stateString = "You Lose!";
else if(getGameState() == GAME_STATE_WIN) stateString = "You Win!"; // This won't ever really get called...
g.setColor(Color.BLACK);
g.setFont(GAME_FONT);
g.drawString(stateString, (getWidth() - fontMets.stringWidth(stateString)) / 2, (getHeight() - fontMets.getHeight()) / 2);
}
public static long now() {
return System.currentTimeMillis();
}
public static int randomInt(int min, int max) {
return new Random().nextInt(max - min) + min;
}
public static float randomFloat(float min, float max) {
return new Random().nextFloat() * (max - min) + min;
}
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* The SnowPanel is what actually <em>IS</em> the game. It holds the main update
* and draw functions and is actually what shows inside of the frame in
* {@link SnowDriver}.
*
* @author z5217759 - Jarod Brennfleck
* @assessmentItem Assignment 3
* @date 17 Aug. 2019
*/
public class SnowPanel extends JPanel {
private static final long serialVersionUID = 65752066642573530L;
public static final int GAME_STATE_NOT_STARTED = -1;
public static final int GAME_STATE_STARTED = 0;
public static final int GAME_STATE_WIN = 1;
public static final int GAME_STATE_LOSE = 2;
public static final float CATCHER_SPEED = 15;
public static final long DEFAULT_SPAWN_RATE = 4000;
public static final long SPAWN_RATE_DECAY = 125;
public static final Color DEFAULT_FLAKE_COLOR = Color.WHITE;
public static final Color DEFAULT_CATCHER_COLOR = Color.WHITE;
public static final Color DEFAULT_BOARD_COLOR = Color.BLUE;
public static final Dimension BOARD_SIZE = new Dimension(500, 400);
public static final Font GAME_FONT = new Font("Roboto", Font.BOLD
| Font.ITALIC, 20);
private JPanel btnPanel;
private JLabel scoreLabel;
private FontMetrics fontMets;
private int boardTop = 80;
private int boardBottom;
private int boardLeft = 0;
private int boardRight;
private ArrayList<SnowFlake> allFlakes;
private float catchX;
private float catchY;
private float catchWidth = 40;
private float catchHeight = 20;
private float catchSpeed = CATCHER_SPEED;
private int gameState = GAME_STATE_NOT_STARTED;
private float score = 0;
private float highScore = score;
private long spawnRate = DEFAULT_SPAWN_RATE;
private long lastSpawn = 0;
private boolean colorChangeMode = false;
public SnowPanel() {
allFlakes = new ArrayList<SnowFlake>();
createPanel();
createSnowGame();
fontMets = getFontMetrics(GAME_FONT);
}
public void createPanel() {
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
float catcherMovement = 0;
String cmd = e.getActionCommand();
if(cmd.equals("left1")) catcherMovement -= 1;
else if(cmd.equals("left2")) catcherMovement -= 2;
else if(cmd.equals("left3")) catcherMovement -= 3;
else if(cmd.equals("right1")) catcherMovement += 1;
else if(cmd.equals("right2")) catcherMovement += 2;
else if(cmd.equals("right3")) catcherMovement += 3;
else if(cmd.equals("reset")) {
if(getGameState() == GAME_STATE_WIN
|| getGameState() == GAME_STATE_LOSE) {
resetGame();
}
} else if(cmd.equals("start")) {
if(getGameState() == GAME_STATE_NOT_STARTED) {
startGame();
}
}
moveCatcher(catcherMovement);
// one line clamp statement.
// is the exact same as:
// if((catchX - catchWidth / 2) <= 0) catchX = catchWidth / 2;
// else if((catchX + catchWidth / 2) >= boardRight) catchX = boardRight -
// catchWidth / 2;
/*
* I won't `repaint()` here because that will change the frame
* rate! Although
* minutely, it will still happen!!!
*/
}
};
scoreLabel = new JLabel();
updateScoreString();
btnPanel = new JPanel();
btnPanel.setPreferredSize(new Dimension(BOARD_SIZE.width, 40));
btnPanel.setBackground(Color.blue);
// This method is more extensible and easier to manage.
//@formatter:off
String[][] btns = {
{"<<<", "left3"},
{"<<", "left2"},
{"<", "left1"},
{"Reset", "reset"},
{"Start", "start"},
{">", "right1"},
{">>", "right2"},
{">>>", "right3"}
};
//@formatter:on
JButton btnTmp;
for(int btn = 0; btn < btns.length; btn++) {
btnTmp = new JButton(btns[btn][0]);
btnTmp.setActionCommand(btns[btn][1]);
btnTmp.addActionListener(al);
btnPanel.add(btnTmp);
}
JCheckBox checkTmp = new JCheckBox("Secret mode...", false);
checkTmp.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
SnowPanel.this.colorChangeMode = (e.getStateChange() == ItemEvent.SELECTED);
}
});
btnPanel.add(checkTmp, btns.length
/ 2);
btnPanel.validate();
setPreferredSize(BOARD_SIZE);
setBackground(Color.cyan);
add(scoreLabel);
add(btnPanel);
}
public void createSnowGame() {
boardLeft = 0;
boardRight = BOARD_SIZE.width;
boardTop = 80; // The top of the game is 80.
boardBottom = BOARD_SIZE.height
- 10; // Minus 10 because that's the game baseline
resetGame();
}
public int getGameState() {
return gameState;
}
public void setGameState(int gameState) {
this.gameState = gameState;
}
public void addSnowFlake() {
float velMax = 1.5F; // Just a value because lol y not?
float sfX = randomFloat(boardLeft, boardRight);
float sfY = boardTop;
float xVel = randomFloat(-velMax, velMax);
synchronized(allFlakes) {
SnowFlake sf = new SnowFlake(sfX, sfY, xVel, SnowFlake.DEFAULT_Y_VELOCITY);
allFlakes.add(sf);
}
}
public void startGame() {
setGameState(GAME_STATE_STARTED);
}
public void winGame(SnowFlake sf) {
score += 1
+ (this.colorChangeMode ? 0.5F : 0F);
highScore = score > highScore ? score : highScore;
synchronized(allFlakes) {
allFlakes.remove(sf);
}
}
public void loseGame() {
setGameState(GAME_STATE_LOSE);
}
public void resetGame() {
setGameState(GAME_STATE_NOT_STARTED);
updateScoreString();
synchronized(allFlakes) {
allFlakes.removeAll(allFlakes); // empties the entire array list
score = 0;
spawnRate = DEFAULT_SPAWN_RATE;
catchX = 250;
catchY = boardBottom
- catchHeight;
lastSpawn = 0;
spawnRate = DEFAULT_SPAWN_RATE;
}
}
public void updateGame() {
if(getGameState() != GAME_STATE_STARTED) return; // Don't update if we're not playing...
moveFlakes();
if(now() - lastSpawn > spawnRate) {
addSnowFlake();
lastSpawn = now();
spawnRate -= SPAWN_RATE_DECAY;
spawnRate = Math.max(spawnRate, SPAWN_RATE_DECAY); // Clamp above SPAWN_RATE_DECAY
}
}
public void moveFlakes() {
if(getGameState() != GAME_STATE_STARTED) return;
// Synchronize this because IN THE OFF CHANCE that we access all flakes twice at
// once!
// Here we loop through all the flakes, move them, check their boundaries, and
// then check if it's been caught!
SnowFlake s;
synchronized(allFlakes) {
for(int i = 0; i < allFlakes.size(); i++) {
s = allFlakes.get(i);
s.update();
s.checkBoundaries(boardTop, boardRight, boardBottom, boardLeft);
if(s.isEndOfLife()) {
if(catchX
- catchWidth
/ 2 <= s.getX()
&& s.getX() <= catchX
+ catchWidth
/ 2) winGame(s);
else loseGame();
}
}
}
updateScoreString();
}
/**
* Moves the catcher according to the amount of steps requested multiplied
* by
* the catcher's speed. The default speed is {@value #CATCHER_SPEED} as
* defined
* by {@link #CATCHER_SPEED}.
*
* Positive steps moves the catcher right, while negative steps move the
* catcher
* left.
*
* @param steps
* How many steps of {@link #CATCHER_SPEED} to take.
*/
public void moveCatcher(float steps) {
if(getGameState() != GAME_STATE_STARTED) return;
steps *= catchSpeed;
catchX += steps;
catchX = (catchX
- catchWidth
/ 2) <= 0 ? catchWidth
/ 2 : (catchX
+ catchWidth
/ 2) >= boardRight ? boardRight
- catchWidth
/ 2 : catchX;
}
public void updateScoreString() {
this.scoreLabel.setText(getScoreString());
}
public String getScoreString() {
return "Score: "
+ (int) this.score
+ " ---- High Score: "
+ (int) this.highScore;
}
/**
* This updates the game's logic after rendering it to the screen.
*
* Ideally a new thread should've been created to call update and repaint,
* or
* better yet, a more stable "sleep timer" could be used (instead of always
* sleeping 20ms, ie, sleep the remainder of 20ms from
* {@link System#currentTimeMillis()}).
*/
@Override
protected void paintComponent(Graphics g) {
Color flakeColor = DEFAULT_FLAKE_COLOR;
Color catcherColor = DEFAULT_CATCHER_COLOR;
Color boardColor = DEFAULT_BOARD_COLOR;
if(this.colorChangeMode) {
flakeColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255));
catcherColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255));
boardColor = new Color(randomInt(0, 255), randomInt(0, 255), randomInt(0, 255));
}
if(this.getBackground() != boardColor) {
this.setBackground(boardColor);
this.validate();
}
super.paintComponent(g);
g.setColor(flakeColor);
drawSnowFlakes(g);
g.setColor(catcherColor);
drawCatcher(g);
// Only go through here if we know our game state is "running"
if(getGameState() != GAME_STATE_STARTED) {
drawEndgameString(g);
}
try {
// Make Logic Changes
updateGame();
Thread.sleep(20);
repaint();
} catch(Exception e) {
e.printStackTrace();
}
}
public void drawSnowFlakes(Graphics g) {
synchronized(allFlakes) {
for(SnowFlake s : allFlakes) {
s.draw(g);
}
}
}
public void drawCatcher(Graphics g) {
g.fillOval((int) (catchX
- (catchWidth
/ 2)), (int) (catchY), (int) catchWidth, (int) catchHeight); // brackets
// make math
// easy!
}
public void drawEndgameString(Graphics g) {
String stateString = "";
if(getGameState() == GAME_STATE_LOSE) stateString = "You Lose!";
else if(getGameState() == GAME_STATE_WIN) stateString = "You Win!"; // This won't ever really get called...
g.setColor(Color.BLACK);
g.setFont(GAME_FONT);
g.drawString(stateString, (getWidth()
- fontMets.stringWidth(stateString))
/ 2, (getHeight()
- fontMets.getHeight())
/ 2);
}
public static long now() {
return System.currentTimeMillis();
}
public static int randomInt(int min, int max) {
return new Random().nextInt(max
- min)
+ min;
}
public static float randomFloat(float min, float max) {
return new Random().nextFloat()
* (max - min)
+ min;
}
}
// file extension is txt because json objects aren't json strings...
{
message:'[Trace - 11:16:08 pm] Sending request \'textDocument/codeAction - (21977)\'.',
level:'info',
timestamp:'2019-09-15 23:16:08.199'
}{
message:'Params: {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n}\n\n',
level:'info',
timestamp:'2019-09-15 23:16:08.200'
}{
message:'[Trace - 11:16:08 pm] Received response \'textDocument/codeAction - (21977)\' in 58ms.',
level:'info',
timestamp:'2019-09-15 23:16:08.257'
}{
message:'Result: [\n {\n "title": "Organize imports",\n "kind": "source.organizeImports",\n "diagnostics": [],\n "command": {\n "title": "Organize imports",\n "command": "java.action.organizeImports",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Override/Implement Methods...",\n "kind": "source.overrideMethods",\n "diagnostics": [],\n "command": {\n "title": "Override/Implement Methods...",\n "command": "java.action.overrideMethodsPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Generate Getters and Setters...",\n "kind": "source.generate.accessors",\n "diagnostics": [],\n "command": {\n "title": "Generate Getters and Setters...",\n "command": "java.action.generateAccessorsPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Generate hashCode() and equals()...",\n "kind": "source.generate.hashCodeEquals",\n "diagnostics": [],\n "command": {\n "title": "Generate hashCode() and equals()...",\n "command": "java.action.hashCodeEqualsPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Generate toString()...",\n "kind": "source.generate.toString",\n "diagnostics": [],\n "command": {\n "title": "Generate toString()...",\n "command": "java.action.generateToStringPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Generate Constructors...",\n "kind": "source.generate.constructors",\n "diagnostics": [],\n "command": {\n "title": "Generate Constructors...",\n "command": "java.action.generateConstructorsPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n },\n {\n "title": "Generate Delegate Methods...",\n "kind": "source.generate.delegateMethods",\n "diagnostics": [],\n "command": {\n "title": "Generate Delegate Methods...",\n "command": "java.action.generateDelegateMethodsPrompt",\n "arguments": [\n {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "range": {\n "start": {\n "line": 51,\n "character": 27\n },\n "end": {\n "line": 51,\n "character": 27\n }\n },\n "context": {\n "diagnostics": []\n }\n }\n ]\n }\n }\n]\n\n',
level:'info',
timestamp:'2019-09-15 23:16:08.257'
}{
message:'[Trace - 11:16:08 pm] Sending request \'textDocument/formatting - (21978)\'.',
level:'info',
timestamp:'2019-09-15 23:16:08.260'
}{
message:'Params: {\n "textDocument": {\n "uri": "file:///c%3A/Users/TheBrenny/My%20Space/Programming/Java/Intro%20To%20Programming%20Uni/Assignment%203/src/SnowPanel.java"\n },\n "options": {\n "tabSize": 4,\n "insertSpaces": false\n }\n}\n\n',
level:'info',
timestamp:'2019-09-15 23:16:08.260'
}{
message:'[Trace - 11:16:08 pm] Received response \'textDocument/formatting - (21978)\' in 11ms.',
level:'info',
timestamp:'2019-09-15 23:16:08.271'
}{
message:'Result: [\n {\n "range": {\n "start": {\n "line": 43,\n "character": 66\n },\n "end": {\n "line": 43,\n "character": 67\n }\n },\n "newText": "\\r\\n\\t\\t\\t"\n }\n]\n\n',
level:'info',
timestamp:'2019-09-15 23:16:08.272'
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment